Ich versuche, eine App zu erstellen, die einen Toast anzeigt, wenn das Bluetooth des Geräts eingeschaltet ist. Ich möchte das auch tun, wenn meine App nicht läuft. Also sollte ich einen Broadcast-Empfänger verwenden, einige Berechtigungen, einen Intent-Filter zum Android-Manifest hinzufügen und eine Java-Klasse erstellen, aber ich kenne die Details nicht.
Was soll ich machen? Welche Berechtigungen sollte ich verwenden?
Um die Statusänderung von Bluetooth zu erkennen, müssen Sie dies zu Ihrer AndroidManifest.xml hinzufügen.
<uses-permission android:name="android.permission.BLUETOOTH" />
Ein Beispielempfänger würde so aussehen, Sie fügen diesen Code an der Stelle hinzu, an der Sie die Übertragung verarbeiten möchten, z. B. eine Aktivität:
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive (Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
if(intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1)
== BluetoothAdapter.STATE_OFF)
// Bluetooth is disconnected, do handling here
}
}
};
Um den Empfänger verwenden zu können, müssen Sie ihn registrieren. Was Sie wie folgt tun können. Ich registriere den Empfänger in meiner Haupttätigkeit.
registerReceiver(this, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
Sie können sich auch dafür entscheiden, alles zu Ihrer AndroidManifest.xml hinzuzufügen. Auf diese Weise können Sie eine spezielle Klasse für den Empfänger erstellen und dort behandeln. Der Empfänger muss nicht registriert werden. Erstellen Sie einfach die Klasse und fügen Sie den folgenden Code zum AndroidManifest hinzu
<receiver
android:name=".packagename.NameOfBroadcastReceiverClass"
android:enabled="true">
<intent-filter>
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED"/>
</intent-filter>
</receiver>
Sie müssen folgende Erlaubnis einholen.
<uses-permission android:name="android.permission.BLUETOOTH" />
und Sie müssen dies als Ihren Absichtsfilter in das Empfänger-Tag schreiben.
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
Leider für das App-Targeting API 26 oder höher funktionieren manifest deklarierte Broadcast-Empfänger nicht mehr (Referenz hier: https://developer.android.com/guide/components/broadcast-exceptions), mit einigen Ausnahmen.
android.bluetooth.adapter.action.STATE_CHANGED
ist nicht in dieser Liste.
Bei Bluetooth können Sie nur auf Änderungen lauschen auf:
ACTION_CONNECTION_STATE_CHANGED
, ACTION_ACL_CONNECTED
, ACTION_ACL_DISCONNECTED