1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Bluetooth: Feststellen ob das Gerät ein connect hat

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von CodeFlatter, 13.06.2010.

  1. CodeFlatter, 13.06.2010 #1
    CodeFlatter

    CodeFlatter Threadstarter Neuer Benutzer

    Beiträge:
    21
    Erhaltene Danke:
    1
    Registriert seit:
    01.06.2010
    Phone:
    Motorola Milestone
    Hallo zusammen,

    hab die SuFu benutzt und nichts dazu gefunden.

    Gibt es eine Möglichkeit bei Android 2.1 festzustellen, ob eines der paired Devices bereits verbunden bzw. connected ist?
    Es ist dabei egal welches, ich möchte nur feststellen, ob irgendein Bluetooth-Gerät mit meinem Handy verbunden ist (ich meine nicht(!) paired).

    Zum Beispiel ein Service soll in eine Datei loggen WANN und wie lange eine Bluetooth-Verbindung hergestellt war, wobei egal ist mit welchem Gerät.

    Es gibt ja BluetoothAdapter.getBondedDevices() mit dem die paired Geräte ermittelt werden können, paired interessiert mich aber nicht.

    Bin für jede Hilfe dankbar ;)

    Grüße CF
     
    Zuletzt bearbeitet: 13.06.2010
  2. Jask, 14.06.2010 #2
    Jask

    Jask Android-Hilfe.de Mitglied

    Beiträge:
    65
    Erhaltene Danke:
    1
    Registriert seit:
    12.06.2010
    Hi,
    Ich bin noch ganz neu in der Android-Programmierung, eingentlich noch gar nicht richtig drin und kann deshlab auch nicht helfen. Bluetooth scheint hier leider auch nicht so richtig Thema zu sein.
    Ich habe aber auch schon mal die BT Api überflogen und habe auch noch keine Funktion für Deine Zwecke gefunden. Dachte also auch, dass das nicht geht.
    Bin aber über eine App bei Androidpit (Missed Call) gestolpert, die so was scheinbar aber kann.
    Vieleicht schreibst Du den Autor mal einfach an?

    Sorry, wenn ich jetzt gleich mal eine Gegenfrage habe, aber wie testest Du Deine Apps, die Bluetooth brauchen? Habe gelesen, dass der Emu Bluetooth nicht kann.
     
    CodeFlatter bedankt sich.
  3. CodeFlatter, 14.06.2010 #3
    CodeFlatter

    CodeFlatter Threadstarter Neuer Benutzer

    Beiträge:
    21
    Erhaltene Danke:
    1
    Registriert seit:
    01.06.2010
    Phone:
    Motorola Milestone
    Hi Jask,

    die BT-Api ist dürftig was meine spezielle Frage angeht, hast du ja schon bemerkt. Erstaunlicherweise lassen sich paired-Devices enumerieren, connected-Devices aber Fehlanzeige.
    Ach ja, "Missed Call" kenne und nutze ich auch, daher weis ich ja das es möglich sein muss und das hat auch nichts mit "rooted"-Devices zu tun, was mir schon einige auf die Nase binden wollten. Ist vielleicht mal eine Idee den Autor anzuschreiben.

    Da der Emulator kein BT kann, teste ich immer direkt auf meinem Handy, anders wäre das ja auch nicht möglich. Da ich Eclipse benutze und die entsprechend notwendigen Plugins, ist das Entwickeln und Testen direkt auf meinem Milestone eine Kleinigkeit. Sofern du also ein Android Gerät dein Eigen nennen kannst, warum dann nicht direkt damit testen?
    Eclipse kopiert und installiert dir deine Anwendung direkt aufs Handy und startet selbige, alles mit nur einem Klick.

    Gruß CF
     
  4. Jask, 14.06.2010 #4
    Jask

    Jask Android-Hilfe.de Mitglied

    Beiträge:
    65
    Erhaltene Danke:
    1
    Registriert seit:
    12.06.2010
    Ja,schreib ihn doch einfach mal an. Vielleicht hat er ja einen Lösungsansatz für Dich.
    Das würde mich auch mal interessieren. Ich kann die App jedenfalls nicht testen, da ich leider noch kein Android-Handy habe und kann deshalb auch nicht wissen, wie die App arbeitet und demzufolge auch nicht mal vermuten, wie das umgesetzt wurde.
    Eventuell überwacht das Tool ja auch nur das Pairing und nicht den Connect?
    Aber das wirst Du sicher schon alles ausführlich getestet haben.
    Vielleicht postest Du ja mal ein bisschen was, wenn Du weiter bist.
    Wie gesagt, wäre auch interessiert.

    Ok, so was habe ich mir schon fast gedacht. Ist etwas umständlich, aber vielleicht gehts ja mal irgendwann auch etwas einfacher.
     
  5. CodeFlatter, 14.06.2010 #5
    CodeFlatter

    CodeFlatter Threadstarter Neuer Benutzer

    Beiträge:
    21
    Erhaltene Danke:
    1
    Registriert seit:
    01.06.2010
    Phone:
    Motorola Milestone
    Nein mit pairing kommt man da nicht weiter - was ja auch keinen Sinn machen würden - da pairing nur bedeutet, es ist ein Gerät bekannt gemacht und besitzt einen gültigen Key.
    Das Gerät muss ja nicht zwingend verbunden sein, ein gutes Beispiel ist das Autoradio oder ein Bluetooth-Headset. Die Geräte sind - wenn bereits am Handy eingerichtet, als paired aufgeführt - nicht mehr und auch nicht weniger.
    Das pairing muss also vor einem connect auf dem Handy durchgeführt worden sein, oder es wird während einer Gerätesuche durchgeführt - dies hat dann aber nichts mit deiner Software zu tun, sondern mit den Bluetooth-Einstellungen vom Handy.

    Gruß CF
     
  6. Jask, 14.06.2010 #6
    Jask

    Jask Android-Hilfe.de Mitglied

    Beiträge:
    65
    Erhaltene Danke:
    1
    Registriert seit:
    12.06.2010
    Ich habe Dich schon richtig verstanden.
    Ich meinte auch, dass ich die App (Missed Call) nicht testen kann, wie sie arbeitet und demzufolge auch nicht mal vermuten kann, wie das umgestzt wurde.
    Deshalb diese Vermutung:
    Du kannst das ja testen (mit Missed Call) und wirst es wohl auch ausführlich gemacht haben.
    Also Missed Call kann tatsächlich auch auf den Connect reagieren?
    Das wäre ja für Dich immerhin eine gute Nachricht und wie gesagt, der Autor könnte dann bestimmt helfen.
    Wenn ja, schreib ruhig später noch mal was dazu, wie man so was machen kann.
     
  7. CodeFlatter, 14.06.2010 #7
    CodeFlatter

    CodeFlatter Threadstarter Neuer Benutzer

    Beiträge:
    21
    Erhaltene Danke:
    1
    Registriert seit:
    01.06.2010
    Phone:
    Motorola Milestone
    Ja kann es. Es hat bei dem BT Dienst zwei TAB's um z.B. die Farbe der LED einzustellen, bei BT On habe ich blau und bei "BT device connect" habe ich pink. Wirklich ein tolles Feature. :)
     
  8. poeschi, 15.06.2010 #8
    poeschi

    poeschi Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    3
    Registriert seit:
    14.06.2010
    Ich weiss nicht, ob es dir hilft, allerdings kann man die Broadcast Intents von "Connected" und "Disconnected" abhören via folgender Intents:

    android.bluetooth.device.action.ACL_CONNECTED
    android.bluetooth.device.action.ACL_DISCONNECTED

    Vielleicht hilft das weiter.
     
    CodeFlatter bedankt sich.
  9. CodeFlatter, 15.06.2010 #9
    CodeFlatter

    CodeFlatter Threadstarter Neuer Benutzer

    Beiträge:
    21
    Erhaltene Danke:
    1
    Registriert seit:
    01.06.2010
    Phone:
    Motorola Milestone
    Hallo poeschi,

    hab Dank für den Hinweis!
    Ich habe mir schon fast gedacht das es so einen Broadcast gibt, hast Du vielleicht auch eine Ahnung wie man das einsetzt?
    Ich vermute mal ich brauche sowas wie nen BroadcastReceiver?

    Aber die Info hilft schon mal wirklich etwas weiter. :)

    Gruß CF
     
  10. poeschi, 15.06.2010 #10
    poeschi

    poeschi Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    3
    Registriert seit:
    14.06.2010
    Hi, hier ist ein Stück Code, den ich mal testweise verwendet habe:

    Code:
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.util.Log;
    
    public class BluetoothDisconnectReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if ("android.bluetooth.device.action.ACL_DISCONNECTED".equals(intent.getAction())) {
                Log.e("TEST", "BT verbindung disconnected!");
    
            }
        }
    }
    
    

    und dann natürlich noch das Manifest:

    Code:
    <receiver   android:name=".receivers.BluetoothDisconnectReceiver"
                  android:enabled="true" 
                  android:exported="false"
                  android:label="BTLabel">
                  <intent-filter>
                    <action android:name="android.bluetooth.device.action.ACL_DISCONNECTED"/>
                   </intent-filter>
            </receiver>
    
     
    robthemobb und CodeFlatter haben sich bedankt.
  11. CodeFlatter, 15.06.2010 #11
    CodeFlatter

    CodeFlatter Threadstarter Neuer Benutzer

    Beiträge:
    21
    Erhaltene Danke:
    1
    Registriert seit:
    01.06.2010
    Phone:
    Motorola Milestone
    Sauber!

    Wenn das nicht hilft, hilft nix! ;)

    Hab auch noch ein wenig im Netz gestöbert und noch das hier gefunden:
    Code:
    getApplicationContext().registerReceiver(receiver,
                        new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED));
    getApplicationContext().registerReceiver(receiver,
                        new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED));
    
    Sollte auch funktionieren und spart die Deklaration im Manifest.

    Danke noch mal, dein Hinweis hats gebracht!

    Gruß CF
     
  12. poeschi, 15.06.2010 #12
    poeschi

    poeschi Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    3
    Registriert seit:
    14.06.2010
    Interessant, dass man sich die Deklaration im Manifest sparen kann...klingt brauchbar:)
     
    Zuletzt bearbeitet: 15.06.2010
  13. CodeFlatter, 15.06.2010 #13
    CodeFlatter

    CodeFlatter Threadstarter Neuer Benutzer

    Beiträge:
    21
    Erhaltene Danke:
    1
    Registriert seit:
    01.06.2010
    Phone:
    Motorola Milestone
    Na ich werd den Kram mal heute Abend geschwind implementieren und schauen ob es der Weisheit letzter Schluß ist. Jetzt habe ich ja den Schubser in die richtige Richtung bekommen... ;)
     
  14. Jask, 15.06.2010 #14
    Jask

    Jask Android-Hilfe.de Mitglied

    Beiträge:
    65
    Erhaltene Danke:
    1
    Registriert seit:
    12.06.2010
  15. CodeFlatter, 15.06.2010 #15
    CodeFlatter

    CodeFlatter Threadstarter Neuer Benutzer

    Beiträge:
    21
    Erhaltene Danke:
    1
    Registriert seit:
    01.06.2010
    Phone:
    Motorola Milestone
    Also habs mal eben implementiert und es funktioniert wie es soll.
    Code:
    // CONNECT
    getApplicationContext().registerReceiver(new BroadcastReceiver() {
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		if ("android.bluetooth.device.action.ACL_CONNECTED".equals(intent.getAction())) {
    	            Log.e(m_TAG, "BT connected!");
            	    bBTConnect = true;
    		}
    	}
    }, new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED));
    
    // DISCONNECT
    getApplicationContext().registerReceiver(new BroadcastReceiver() {
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		if ("android.bluetooth.device.action.ACL_DISCONNECTED".equals(intent.getAction())) {
    			Log.e(m_TAG, "BT disconnected!");
                		bBTConnect = false;
    		}
    	}
    }, new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED));
    Den Zustand speichere ich in bBTConnect und der Receiver ist jeweils eine lokale anonyme Klasse. Im Manifest war wie schon von mir vermutet nichts einzutragen. Bereits bestehende Verbindungen bekomme ich so allerdings nicht mit, vielleicht finde ich da auch noch eine Lösung.

    Hm dazu kann ich leider nicht viel sagen, mit dem BT-Filetransfer habe ich nicht wirklich was am Hut - im Moment jedenfalls. Also auch keine Erfahrungen damit.

    Ganz allgemein ist es aber mal egal ob die übertragene Datei eine Textdatei, ein Bild, Mp3 oder sonst was ist - übertragen wird meist als Byte-Stream. Bei eigenen Implementierungen wo Server und Client programmiert werden (müssen), macht es Sinn die Dateiübertragung in zwei (oder mehr) Stufen zu machen (nur ein Beispiel):
    1. Filename wird im Übertragungspuffer abgelegt und mit einem speziellen Separator versehen
    2. Die Daten werden hinten dran gehängt - in den gleichen Puffer
    3. optional: eine Prüfsumme könnte am Ende der Daten noch angehängt werden, wieder mit Separator

    Dann wird alles zusammen übertragen. Der Empfänger-Client muss sich dann zuerst aus dem Datenstrom den Dateinamen extrahieren und kann mit diesem String die Zieldatei mit identischen Namen erzeugen. Schliesslich werden dann noch die weiteren kommenden Daten in der Datei ablegt - die ja nach dem eindeutigen Separator kommen müssen...

    Alternativ kann man auch zuerst ein Dateidescriptor-Objekt serialisieren und dann erst die Daten, der Client muss nur das so selbst definierte "Protokoll" kennen und entsprechend handeln.

    Zumindest würde ich versuchen, das so in etwa anzugehen ;).

    Gruß CF
     
  16. w14201c, 27.11.2012 #16
    w14201c

    w14201c Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    26.06.2011
    Hi, Euer Zwei-Personen Gespräch aus 2010 ist leider bei Android immer noch aktuell und trifft exakt mein Problem:

    Ich = Noch Newbe!
    Thema Phone App, die auf verbundenes BT-Headset speziell reagieren soll. Ich fange alles über Receivers ab, was ich brauche. Sofern ein CHANGE passiert, während die App läuft (das war ja euer Thema).
    Problem ist: Connection-Status ab onCreate bis zum ersten Intent (Change Event). Also der Initialstatus. Da brauche ich, wie ihr, auch eine Connected-Info.
    Eine sehr tricky Lösung: im Code CONNECT durchführen, wenn's nicht geht, ist wohl kein Headset da. Das geht sehr auf die Laufzeit. Ich suche schon seit Tagen und finde keinen Tipp. Pls. help?
     
    Zuletzt bearbeitet: 27.11.2012

Diese Seite empfehlen