Wie erkennt man Bluetooth-Statusänderungen mit einem Broadcast-Empfänger?

Lesezeit: 3 Minuten

Wie erkennt man Bluetooth Statusanderungen mit einem Broadcast Empfanger
Mohammed H

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?

1647942188 723 Wie erkennt man Bluetooth Statusanderungen mit einem Broadcast Empfanger
paNji

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>

  • Ich kenne nur eine Klasse von Rundfunkempfängern

    – Mohammed H

    22. Juli 2014 um 13:09 Uhr

  • Sollte dieser Empfänger funktionieren, wenn ich die App schließe? Weil es nicht funktioniert.

    – Hilal

    9. Juni 2019 um 4:02 Uhr

Wie erkennt man Bluetooth Statusanderungen mit einem Broadcast Empfanger
Manikanta Ottiprolu

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" />

1647942189 210 Wie erkennt man Bluetooth Statusanderungen mit einem Broadcast Empfanger
Nicola Gallazzi

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

  • Sie haben den Verbindungsstatus der Aktion zweimal geändert

    – siehe da

    2. Mai 2019 um 23:54 Uhr

  • Was ist also die Problemumgehung? Sobald ich mich bei ACTION_CONNECTION_STATE_CHANGED registriere, was sollte die Absicht mir in onReceive zurückgeben. Oder gibt es eine andere Technik, um die Aufgabe auszuführen

    – Faisal

    8. Juli 2019 um 11:12 Uhr

  • Sie können Ihren Broadcast-Empfänger immer noch auf Aktivitäts- oder Fragmentebene registrieren, denken Sie daran, den Empfänger abzumelden, sobald seine Arbeit erledigt ist

    – Nicola Gallazzi

    9. Juli 2019 um 6:38 Uhr

  • Danke. Ich hatte Probleme, einen Wechsel von “Bluetooth on” zu “Bluetooth off” aufgrund dieser Änderungen in API 26 zu erkennen. Funktioniert wie ein Zauber, wenn ich den Empfänger in MainApplikation.kt registriere: registerBlootoothReceiver(){ val filter = IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED ) bluetoothReceiver = BluetoothReceiver() registerReceiver(bluetoothReceiver, filter) }

    – Luigi_Papardelle

    25. April 2020 um 10:55 Uhr


1005460cookie-checkWie erkennt man Bluetooth-Statusänderungen mit einem Broadcast-Empfänger?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy