Android-Broadcast-Empfänger-bluetooth-Ereignisse abfangen
Ich versuche zu fangen, bluetooth-Status-änderungen mit dem Broadcast Receiver.
Mein manifest:
<uses-permission android:name="android.permission.BLUETOOTH" />
<application>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".BluetoothBroadcastReceiver"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
<action android:name="android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED" />
<action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
<action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
</intent-filter>
</receiver>
</application>
Empfänger onReceive
Methode:
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.d("BroadcastActions", "Action "+action+"received");
int state;
BluetoothDevice bluetoothDevice;
switch(action)
{
case BluetoothAdapter.ACTION_STATE_CHANGED:
state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1);
if (state == BluetoothAdapter.STATE_OFF)
{
Toast.makeText(context, "Bluetooth is off", Toast.LENGTH_SHORT).show();
Log.d("BroadcastActions", "Bluetooth is off");
}
else if (state == BluetoothAdapter.STATE_TURNING_OFF)
{
Toast.makeText(context, "Bluetooth is turning off", Toast.LENGTH_SHORT).show();
Log.d("BroadcastActions", "Bluetooth is turning off");
}
else if(state == BluetoothAdapter.STATE_ON)
{
Log.d("BroadcastActions", "Bluetooth is on");
}
break;
case BluetoothDevice.ACTION_ACL_CONNECTED:
bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Toast.makeText(context, "Connected to "+bluetoothDevice.getName(),
Toast.LENGTH_SHORT).show();
Log.d("BroadcastActions", "Connected to "+bluetoothDevice.getName());
break;
case BluetoothDevice.ACTION_ACL_DISCONNECTED:
bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Toast.makeText(context, "Disconnected from "+bluetoothDevice.getName(),
Toast.LENGTH_SHORT).show();
break;
}
}
Ich die app starten, dann minimieren Sie es durch drücken der Home-Taste. Gehen Sie zu Einstellungen und schalten Sie bluetooth, aber nichts passiert. Obwohl ich erwarten, toast und logcat-Meldungen. Was ist hier falsch?
InformationsquelleAutor der Frage Long Smith | 2015-05-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um zu fangen, Bluetooth-Status-änderungen (
STATE_OFF
STATE_TURNING_ON
STATE_ON
STATE_TURNING_OFF
), tun Sie dies in Ihrer Tätigkeit:Erste, hinzufügen von Bluetooth-Berechtigung, um Ihre AndroidManifest-Datei:
Erstellen Sie ein BroadcastReceiver in der Activity oder Service:
Erstellen Sie ein IntentFilter und registrieren Sie es mit BroadcastReceiver zur Aktivität/Service in Ihrem
onCreate()
Methode:BroadcastReceiver Registrierung in Ihrem
onDestroy()
Methode:Um zu fangen, änderungen der Auffindbarkeit Gerät (
SCAN_MODE_NONE
SCAN_MODE_CONNECTABLE
SCAN_MODE_CONNECTABLE_DISCOVERABLE
), erstellen Sie einen anderen BroadcastReceiver und register/unregister zu Ihrer Tätigkeit, wie ich oben erwähnt habe. Einzige Unterschied zwischen diesen BroadcastReceiver ist erste benutztBluetoothAdapter.EXTRA_STATE
und die anderen nutzt manBluetoothAdapter.EXTRA_SCAN_MODE
. Hier ist der Beispiel code für BroadcastReceiver zu fangen Auffindbarkeit änderungen:Filter erstellen und registrieren Sie es in
onCreate()
Methode:Erstellen der BroadcastReciver in der Tätigkeit/Dienstleistung zu fangen Auffindbarkeit änderungen:
Und schließlich Registrierung es in
onDestroy()
:Beachten Sie, dass Sie nicht brauchen, um hinzuzufügen, jede
<intent-filter>
oder<receiver>
auf Ihre AndroidManifest-Datei, außer Sie müssen zum hinzufügen von Bluetooth-Erlaubnis natürlich.Wenn Sie möchten, zu fangen (
ACTION_ACL_CONNECTED
ACTION_ACL_DISCONNECTED
ACTION_ACL_DISCONNECT_REQUESTED
), jetzt müssen Sie einen<intent-filter>
auf Ihre AndroidManifest-Datei:Filter erstellen und registrieren Sie es in
onCreate()
Methode:Erstellen Sie dann den BroadcastReceiver in der Activity/Service:
Und schließlich aufheben der Registrierung:
Wenn Sie mehr Lesen wollen über die Staatliche Konstanten, dies ist aus der Dokumentation:
InformationsquelleAutor der Antwort Mustafa Berkay Mutlu
Ihre Haupt-problem 😉 Du kannst die "Schalter" für string-Vergleich.
Zumindest solange nicht, bis VERSION_INT 18 (inklusive). Version 19 Schritte mit Java 7.
InformationsquelleAutor der Antwort chksr