Download the free trial version
Basic4android Video
Features
Tutorials and manuals
Showcase
Screenshots

Go Back   Android Development Forum - Basic4android > Basic4android > Basic4android Getting started & Tutorials > German Tutorials
Documentation Wiki Register Members List B4P Search Today's Posts Mark Forums Read

German Tutorials Basic4android German tutorials.
Please post questions in the German forum.

Android Serial Tutorial

Reply
 
LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 01-26-2011, 09:05 PM
klaus's Avatar
Basic4ppc Expert
 
Join Date: Oct 2007
Location: Fully, Switzerland
Posts: 4,463
Awards Showcase
Forum Contributer Beta Tester Competition Winner 
Total Awards: 3
Default Android Serial Tutorial

Dieses Tutorial befaßt sich mit der Serial-Library. Diese Library, erlaubt mit anderen Bluetooth-Geräten mit Hilfe von virtuellen seriellen Schnittstellen (RFCOMM) in Verbindung zu treten.

Das Programm zu diesem Tutorial befindet sich am Ende.
Das Englische Originaltutorial.

Beachten Sie, daß dieses Beispiel die Core Library v1.05 oder höher benötigt.
Die Serial Library benötigt Android OS 2.0 oder höher (API-Level 5 oder höher).

Wir bauen ein einfaches Chat-Beispiel mit zwei angeschloßenen Geräten die Text Meldungen senden.




Wir haben ein Process globales Objekt erstellet mit dem Namen Serial1 und vom Type Serial.
Normalerweise ist es eine gute Idee, Prozess-Objekte in Sub Activity_Create zu initialisieren wenn die FirstTime Variable True ist. Auf diese Weise werden diese Objekte nur einmal initialisiert.

Code:
Sub Activity_Create(FirstTime As Boolean)
    
If FirstTime Then
        Serial1.Initialize(
"Serial1")
        Timer1.Initialize(
"Timer1"200)
    
End If
    Activity.LoadLayout(
"1")
    Activity.AddMenuItem(
"Connect""mnuConnect")
    Activity.AddMenuItem(
"Disconnect""mnuDisconnect")
End Sub
Die nächste Subroutine die durchlaufen wird ist Activity_Resume:

Code:
Sub Activity_Resume
    
If Serial1.IsEnabled = False Then
        
Msgbox("Please enable Bluetooth.""")
    
Else
        Serial1.Listen 
'listen for incoming connections
    End If
End Sub
Hier überprüfen wir ob Bluetooth im Gerät aktiviert ist. Wenn es nicht aktiviert ist fragen wir den Benutzer das Gerät zu aktivieren. Beachten Sie daß wir diesen Code in die Activity_Resume Routine eingefügt haben und nicht in die Activity_Create Routine somit wird der Test jedesmal durchgeführt wenn die Activity aktiviert (resumed) wird. Wenn der Benutzer in den Settings Screen geht und das Bluetooth aktiviert und dann wieder in die Anwendung zurück kehrt, wissen wir daß Bluetooth aktiviert ist.

Sobald Bluetooth aktiviert ist, warten wir auf eingehende Verbindungen. Das erlaubt andere Geräte mit unserem Gerät in Verbindung zu treten. Dies ist nicht erforderlich, wenn wir mit einem Gerät in Verbindungen treten wollen das auf Verbindungen wartet (wie das externe GPS zum Beispiel).

Beachten Sie, daß ein mehrmaliger Aufruf von Listen nichts aus macht. Und wir sind auf der sicheren Seite wenn wir es so machen.

Wenn der Benutzer auf den Connect Menüeintrag drückt zeigen wir die Liste der bekannten gepaarten Geräte an. Wenn der Benutzer jetzt auf einen Gerätenamen klickt holen wir seine MAC Adresse von der Map und verbinden es mit unserem Gerät:




Code:
Sub mnuConnect_Click
    
Dim PairedDevices As Map
    PairedDevices = Serial1.GetPairedDevices
    
Dim l As List
    l.Initialize
    
For i = 0 To PairedDevices.Size - 1
        l.Add(PairedDevices.GetKeyAt(i)) 
'add the friendly name to the list
    Next
    
Dim res As Int
    res = 
InputList(l, "Choose device", -1'show list with paired devices
    If res <> DialogResponse.CANCEL Then
        Serial1.Connect(PairedDevices.Get(l.Get(res))) 
'convert the name to mac address
    End If
End Sub

Die Verbindung wird nicht sofort erstellt, das wird im Hintergrund vorgenommen. Wenn die Verbindung hergestellt ist wird das Connected Event ausgelöst. Der 'Success' Parameter informiert uns ob die Verbindung erfolgreich erstellt wurde.

Das Connected Event kann auch ausgelöst werden wenn eine einkommende Verbindung erstellt wurde.
Code:
Sub Serial1_Connected (Success As Boolean)
    
If Success Then
        
ToastMessageShow("Connected successfully"False)
        TextReader1.Initialize(Serial1.InputStream)
        TextWriter1.Initialize(Serial1.OutputStream)
        timer1.Enabled = 
True
        connected = 
True
    
Else
        connected = 
False
        Timer1.Enabled = 
False
        
Msgbox(LastException.Message, "Error connecting.")
    
End If
End Sub
Wenn die Verbindung erfolgreich erstellt wurde können wir mit dem Datentransfer anfangen.
TextReader1 und TextWriter1 sind Process Global Objekte. Jetzt initialisieren wir diese als Serial1.InputStream und Serial1.OutputStream. Des erlaubt uns mit der neu erstellten Verbindung Texte zu senden und zu empfangen.
Timer1 wird benutzt um zu testen ob eingegangene Daten bereit sind und wenn ja diese Daten zu lesen. Jetzt aktivieren wir den Timer und warten auf Daten.

Falls die Verbindung fehl gegangen ist rufen wir die Exception ab und zeigen sie an.

Meldungen senden – Wenn der Benutzer den btnSend Button drückt senden wir den Text:

Code:
Sub btnSend_Click
    
If connected Then
        TextWriter1.WriteLine(txtSend.Text)
        TextWriter1.Flush
        txtSend.Text = 
""
    
End If
End Sub
'connected' ist eine Variable die wir benutzen um zu wissen ob wir derzeit verbunden sind.
Beachten Sie, daß wir Flush nach dem Senden des Textes aufrufen. Auf diese Weise stellen wir sicher, daß TextWriter den Text nicht puffert und ihn sofort schickt.

Meldungen empfangen – Jedesmal wenn die Timer1_Tick Routine aufgerufen wird überprüfen wir ob Daten zum einlesen bereit stehen. Wenn ja, lesen wir sie und hängen sie in der großen EditText View an:


Code:
Sub Timer1_Tick
    
If connected Then
        
If TextReader1.Ready Then 'check if there is any data waiting to be read
            txtLog.Text = txtLog.Text & TextReader1.ReadLine & CRLF
            txtLog.SelectionStart = txtLog.Text.Length
        
End If
    
End If
End Sub
TextReader.ReadLine ist ein blockierender Aufruf. Er wartet, bis mindestens ein einzelnes Zeichen zum lesen bereit ist. Deshalb müßen wir TextReader.Ready testen wenn wir nicht unsere Anwendung blockieren wollen.
Diese Anwendung kann auch zur Verbindung mit nicht Android Geräten benutzt werden.

Ein externes GPS zum Beispiel:


Das externe GPS sendet kontinuierlich Daten als Text.
Ich hatte gerade eine sehr interessante Unterhaltung mit dem externen GPS...

Das Programm zu diesem Tutorial :

SerialExample.zip
__________________
Klaus
Switzerland

Beginner's Guide / User's Guide

Last edited by klaus : 02-02-2011 at 03:37 PM.
Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are On

Similar Threads
Thread Thread Starter Forum Replies Last Post
SQL tutorial Erel Basic4android Getting started & Tutorials 74 05-23-2012 11:27 PM
Android Serial tutorial Erel Basic4android Getting started & Tutorials 78 05-20-2012 05:39 AM
Android JSON tutorial Erel Basic4android Getting started & Tutorials 5 05-07-2012 03:33 AM
Android views animation tutorial Erel Basic4android Getting started & Tutorials 46 05-03-2012 01:37 PM
Android Network Tutorial Erel Basic4android Getting started & Tutorials 56 03-22-2012 07:26 AM


All times are GMT. The time now is 11:20 PM.


Powered by vBulletin® Version 3.6.12
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0