Bluetooth: Feststellen ob das Gerät ein connect hat

CodeFlatter

CodeFlatter

Neues Mitglied
1
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:
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.
Diese Anwendung informiert Sie, bewusst dezent und über verschiedene Lichtsignale, Töne oder Vibrationen über verpasste oder eingehende Anrufe, SMS, Kalenderevents oder Bluetooth-Verbindungen.
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.
 
  • Danke
Reaktionen: CodeFlatter
Jask schrieb:
Hi,
Bin aber über eine App bei Androidpit (Missed Call) gestolpert, die so was scheinbar aber kann.
Vieleicht schreibst Du den Autor mal einfach an?

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
 
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.

Eclipse kopiert und installiert dir deine Anwendung direkt aufs Handy und startet selbige, alles mit nur einem Klick.
Ok, so was habe ich mir schon fast gedacht. Ist etwas umständlich, aber vielleicht gehts ja mal irgendwann auch etwas einfacher.
 
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
 
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:
Eventuell überwacht das Tool ja auch nur das Pairing und nicht den Connect?
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.
 
Jask schrieb:
Also Missed Call kann tatsächlich auch auf den Connect reagieren?
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. :)
 
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.
 
  • Danke
Reaktionen: CodeFlatter
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
 
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>
 
  • Danke
Reaktionen: robthemobb und CodeFlatter
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
 
Interessant, dass man sich die Deklaration im Manifest sparen kann...klingt brauchbar:)
 
Zuletzt bearbeitet:
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... ;)
 
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.

Jask schrieb:
Super!
Dann kannst Du vielleicht noch was dazu sagen, wie man Dateiein über RFCOMM empfängt, ohne das man den Typ vorher kennt? Empfängt man eine Textdatei genauso wie eine Binärdatei?
https://www.android-hilfe.de/forum/...g.9/bluetooth-rfcomm-dateitransfer.31269.html

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
 
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:

Ähnliche Themen

G
Antworten
8
Aufrufe
1.167
gnome2012
G
S
Antworten
4
Aufrufe
4.132
mblaster4711
mblaster4711
wernho
Antworten
11
Aufrufe
603
wernho
wernho
Zurück
Oben Unten