So aktivieren / deaktivieren Sie Bluetooth programmgesteuert in Android

104

Ich möchte Bluetooth über das Programm aktivieren / deaktivieren. Ich habe den folgenden Code.

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (!mBluetoothAdapter.isEnabled()) {
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

Dieser Code funktioniert jedoch nicht in SDK 1.5. Wie kann ich es zum Laufen bringen?

user458295
quelle
Wie funktioniert es nicht? Erhalten Sie einen Fehler? Wenn ja, was ist der Fehler?
Adam Driscoll
1
BluetoothAdapter zeigt Fehler in SDK 1.5
user458295

Antworten:

165

Dieser Code hat bei mir funktioniert.

//Disable bluetooth
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.disable(); 
} 

Damit dies funktioniert, müssen Sie über die folgenden Berechtigungen verfügen:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Prijin
quelle
es funktioniert auch bei mir wirklich. einfache Methode, um das Bluetooth in Android-Geräten zu trennen. Vielen Dank Kumpel.
Amit Thaper
7
Wenn Sie die BLUETOOTH_ADMIN-Berechtigung hinzufügen, funktioniert dies. Wenn nicht, müssen Sie startActivityForResult (enableBtIntent, 0) verwenden. um Ihr Bluetooth zu aktivieren
Majid Golshadi
1
Vielen Dank für Ihre nützliche Antwort +1. Ich möchte nur hinzufügen, wer nicht weiß, wie man es aktiviert: mBluetoothAdapter.enable ()
Chris Sim
96

Hier ist eine etwas robustere Methode, um auch die Rückgabewerte von enable()\disable()Methoden zu behandeln:

public static boolean setBluetooth(boolean enable) {
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    boolean isEnabled = bluetoothAdapter.isEnabled();
    if (enable && !isEnabled) {
        return bluetoothAdapter.enable(); 
    }
    else if(!enable && isEnabled) {
        return bluetoothAdapter.disable();
    }
    // No need to change bluetooth state
    return true;
}

Fügen Sie Ihrer Manifestdatei die folgenden Berechtigungen hinzu:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

Aber denken Sie an diese wichtigen Punkte:

Dies ist ein asynchroner Aufruf: Er wird sofort zurückgegeben, und Clients sollten darauf warten, dass ACTION_STATE_CHANGED über nachfolgende Änderungen des Adapterstatus benachrichtigt wird. Wenn dieser Aufruf true zurückgibt, wechselt der Adapterstatus sofort von STATE_OFF zu STATE_TURNING_ON und einige Zeit später entweder zu STATE_OFF oder STATE_ON. Wenn dieser Aufruf false zurückgibt, gab es ein sofortiges Problem, das das Einschalten des Adapters verhinderte, z. B. den Flugzeugmodus, oder der Adapter ist bereits eingeschaltet.

AKTUALISIEREN:

Ok, wie implementiere ich einen Bluetooth-Listener?:

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();

        if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
            final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
                                                 BluetoothAdapter.ERROR);
            switch (state) {
            case BluetoothAdapter.STATE_OFF:
                // Bluetooth has been turned off;
                break;
            case BluetoothAdapter.STATE_TURNING_OFF:
                // Bluetooth is turning off;
                break;
            case BluetoothAdapter.STATE_ON:
                // Bluetooth is on
                break;
            case BluetoothAdapter.STATE_TURNING_ON:
                // Bluetooth is turning on
                break;
            }
        }
    }
};

Und wie kann man den Empfänger registrieren / abmelden? (In deiner ActivityKlasse)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // ...

    // Register for broadcasts on BluetoothAdapter state change
    IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
    registerReceiver(mReceiver, filter);
}

@Override
public void onStop() {
    super.onStop();

     // ...

    // Unregister broadcast listeners
    unregisterReceiver(mReceiver);
}
Caner
quelle
1
Wenn Sie die BLUETOOTH_ADMINErlaubnis hinzufügen , funktioniert es, aber wenn nicht, müssen Sie verwenden startActivityForResult(enableBtIntent, 0);, um Ihr Bluetooth zu aktivieren
Majid Golshadi
1
Die hervorgehobenen Informationen werden aus den BluetoothAdapter-Dokumenten speziell für die enable () -Methode zitiert.
Kevin Lee
Hey, die Dokumente sagen, Bluetooth should never be enabled without direct user consent. If you want to turn on Bluetooth in order to create a wireless connection, you should use the ACTION_REQUEST_ENABLE Intent, which will raise a dialog that requests user permission to turn on Bluetooth. The enable() method is provided only for applications that include a user interface for changing system settings, such as a "power manager" app.was bedeutet das? Zum Beispiel. Ich habe eine kleine App aus Ihrem Code gemacht und es hat funktioniert. Aber wenn ich in den Play Store hochladen möchte, funktioniert es nicht?
Hilal
@Hilal wird es funktionieren. Benutzer müssen jedoch vor der Installation ihre Zustimmung geben. Sie werden einen Dialog wie diesen sehen: pewinternet.org/2015/11/10/…
Caner
23

Um Bluetooth zu aktivieren, können Sie eine der folgenden Funktionen verwenden:

 public void enableBT(View view){
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (!mBluetoothAdapter.isEnabled()){
        Intent intentBtEnabled = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
        // The REQUEST_ENABLE_BT constant passed to startActivityForResult() is a locally defined integer (which must be greater than 0), that the system passes back to you in your onActivityResult() 
        // implementation as the requestCode parameter. 
        int REQUEST_ENABLE_BT = 1;
        startActivityForResult(intentBtEnabled, REQUEST_ENABLE_BT);
        }
  }

Die zweite Funktion ist:

public void enableBT(View view){
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (!mBluetoothAdapter.isEnabled()){
        mBluetoothAdapter.enable();
    }
}

Der Unterschied besteht darin, dass die App den Benutzer mit der ersten Funktion auffordert, das Bluetooth einzuschalten oder zu verweigern. Mit der zweiten Funktion schaltet die App Bluetooth direkt ein.

Verwenden Sie die folgende Funktion, um Bluetooth zu deaktivieren:

public void disableBT(View view){
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (mBluetoothAdapter.isEnabled()){
        mBluetoothAdapter.disable();
    }
}

HINWEIS / Die erste Funktion benötigt nur die folgende Berechtigung, um in der Datei AndroidManifest.xml definiert zu werden:

<uses-permission android:name="android.permission.BLUETOOTH"/>

Die zweite und dritte Funktion benötigen die folgenden Berechtigungen:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Ahmed Alnabhan
quelle
Ich denke, der Parameter (Ansichtsansicht) ist nicht erforderlich
CitrusO2
6

Die Lösung von Prijin hat bei mir perfekt funktioniert. Es ist nur fair zu erwähnen, dass zwei zusätzliche Berechtigungen erforderlich sind:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

Wenn diese hinzugefügt werden, funktioniert das Aktivieren und Deaktivieren mit dem Standard-Bluetooth-Adapter einwandfrei.

Peter Osburg
quelle
4

Ich habe den folgenden Code verwendet, um BT zu deaktivieren, wenn meine App gestartet wird und einwandfrei funktioniert. Ich bin mir nicht sicher, ob dies der richtige Weg ist, um dies zu implementieren, da Google empfiehlt, "bluetooth.disable ()" nicht zu verwenden. ohne explizite Benutzeraktion zum Ausschalten von Bluetooth.

    BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
    bluetooth.disable();

Ich habe nur die unten stehende Erlaubnis verwendet.

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
nik
quelle
2

Fügen Sie Ihrer Manifestdatei die folgenden Berechtigungen hinzu:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

Aktivieren Sie Bluetooth, verwenden Sie dies

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (!mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.enable(); 
}else{Toast.makeText(getApplicationContext(), "Bluetooth Al-Ready Enable", Toast.LENGTH_LONG).show();}

Deaktivieren Sie Bluetooth, um dies zu verwenden

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.disable(); 
}
Selim Raza
quelle
0

Versuche dies:

//this method to check bluetooth is enable or not: true if enable, false is not enable
public static boolean isBluetoothEnabled()
    {
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (!mBluetoothAdapter.isEnabled()) {
            // Bluetooth is not enable :)
            return false;
        }
        else{
            return true;
        }

    }

//method to enable bluetooth
    public static void enableBluetooth(){
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (!mBluetoothAdapter.isEnabled()) {
            mBluetoothAdapter.enable();
        }
    }

//method to disable bluetooth
    public static void disableBluetooth(){
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (mBluetoothAdapter.isEnabled()) {
            mBluetoothAdapter.disable();
        }
    }

Fügen Sie diese Berechtigungen im Manifest hinzu

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Bapusaheb Shinde
quelle