Jak programowo włączyć / wyłączyć Bluetooth w systemie Android

104

Chcę włączyć / wyłączyć bluetooth w programie. Mam następujący kod.

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

Ale ten kod nie działa w SDK 1.5. Jak mogę to zrobić?

user458295
źródło
Jak to nie działa? Czy pojawia się błąd? Jeśli tak, jaki jest błąd?
Adam Driscoll,
1
BluetoothAdapter wyświetla błąd w SDK 1.5
user458295

Odpowiedzi:

164

ten kod zadziałał dla mnie ..

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

Aby to zadziałało, musisz mieć następujące uprawnienia:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
prijin
źródło
to naprawdę działa również dla mnie. prosta metoda odłączania bluetooth w urządzeniach z systemem Android. wielkie dzięki kolego.
Amit Thaper
7
jeśli dodasz uprawnienie BLUETOOTH_ADMIN, to działa, ale jeśli nie, musisz użyć startActivityForResult (enableBtIntent, 0); aby włączyć bluetooth
Majid Golshadi
1
Dziękuję za przydatną odpowiedź +1. po prostu chcę dodać na który nie wie, jak go włączyć: mBluetoothAdapter.enable ()
Chris Sim
97

Oto nieco bardziej solidny sposób, w jaki można to zrobić, obsługujący również wartości zwracane przez enable()\disable()metody:

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;
}

I dodaj następujące uprawnienia do pliku manifestu:

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

Ale pamiętaj o tych ważnych kwestiach:

Jest to wywołanie asynchroniczne: wróci natychmiast, a klienci powinni nasłuchiwać ACTION_STATE_CHANGED, aby otrzymywać powiadomienia o kolejnych zmianach stanu adaptera. Jeśli to wywołanie zwróci wartość true, stan adaptera natychmiast zmieni się ze STATE_OFF na STATE_TURNING_ON, a po pewnym czasie przejdzie do STATE_OFF lub STATE_ON. Jeśli to wywołanie zwróci błąd, oznacza to, że wystąpił natychmiastowy problem, który uniemożliwi włączenie karty - na przykład tryb samolotowy lub karta jest już włączona.

AKTUALIZACJA:

Ok, więc jak zaimplementować odbiornik bluetooth ?:

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;
            }
        }
    }
};

A jak zarejestrować / wyrejestrować odbiorcę? (W twojej Activityklasie)

@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
źródło
1
jeśli dodasz BLUETOOTH_ADMINpozwolenie, to działa, ale jeśli nie, musisz użyć, startActivityForResult(enableBtIntent, 0);aby włączyć bluetooth
Majid Golshadi
1
podświetlone informacje są cytowane z dokumentacji BluetoothAdapter, w szczególności dla metody enable ().
Kevin Lee
hej, doktorzy mówią, że 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.co to znaczy? Na przykład. Zrobiłem małą aplikację z twojego kodu i zadziałała. Ale jeśli chcę przesłać do Play Store, to nie zadziała?
Hilal
@Hilal to zadziała. Ale użytkownicy muszą wyrazić zgodę przed instalacją. Zobaczą
Caner
23

Aby włączyć Bluetooth, możesz użyć jednej z następujących funkcji:

 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);
        }
  }

Druga funkcja to:

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

Różnica polega na tym, że pierwsza funkcja sprawia, że ​​aplikacja pyta użytkownika o pozwolenie na włączenie Bluetooth lub odmowę. Druga funkcja sprawia, że ​​aplikacja bezpośrednio włącza Bluetooth.

Aby wyłączyć Bluetooth, użyj następującej funkcji:

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

UWAGA / Pierwsza funkcja wymaga tylko następujących uprawnień do zdefiniowania w pliku AndroidManifest.xml:

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

Podczas gdy druga i trzecia funkcja wymagają następujących uprawnień:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Ahmed Alnabhan
źródło
Myślę, że parametr (Widok widoku) nie jest konieczny
CitrusO2
6

Rozwiązanie prijin zadziałało idealnie dla mnie. Wystarczy wspomnieć, że potrzebne są dwa dodatkowe uprawnienia:

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

Po ich dodaniu włączanie i wyłączanie działa bezbłędnie z domyślnym adapterem Bluetooth.

Peter Osburg
źródło
4

Użyłem poniższego kodu, aby wyłączyć BT, gdy moja aplikacja uruchamia się i działa dobrze. Nie jestem pewien, czy to właściwy sposób implementacji, ponieważ Google odradza korzystanie z funkcji „bluetooth.disable ();” bez wyraźnej akcji użytkownika, aby wyłączyć Bluetooth.

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

Skorzystałem tylko z poniższego pozwolenia.

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
nik
źródło
2

Dodaj następujące uprawnienia do pliku manifestu:

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

Włącz Bluetooth, użyj tego

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

Wyłącz funkcję Bluetooth

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.disable(); 
}
Selim Raza
źródło
0

Spróbuj tego:

//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();
        }
    }

Dodaj te uprawnienia w manifeście

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Bapusaheb Shinde
źródło