Як увімкнути / відключити Bluetooth програмно в Android


104

Я хочу включити / вимкнути Bluetooth через програму. У мене є такий код.

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

Але цей код не працює в SDK 1.5. Як я можу змусити його працювати?


Як це не працює? Ви отримуєте помилку? Якщо так, то яка помилка?
— Адам Дрісколл

1
BluetoothAdapter відображає помилку в SDK 1.5
— користувач458295

Відповіді:



164

цей код працював для мене ..

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

Щоб це працювало, ви повинні мати такі дозволи:

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

це дійсно працює і для мене. простий метод відключення Bluetooth в Android пристроях. дякую, приятель.
— Аміт Тапер

7
якщо ви додаєте дозвіл BLUETOOTH_ADMIN, він працює, але якщо ні, вам не потрібно використовувати startActivityForResult (enableBtIntent, 0); щоб увімкнути свій bluetooth
— Majid Golshadi

1
Дякуємо за вашу корисну відповідь +1. просто хочу додати для тих, хто не знає, як це ввімкнути: mBluetoothAdapter.enable ()
— Кріс Сім,

97

Ось трохи надійніший спосіб зробити це, також обробляючи зворотні значення enable()\disable()методів:

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

І додайте в файл маніфесту такі дозволи:

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

Але пам’ятайте про такі важливі моменти:

Це асинхронний виклик: він негайно повернеться, і клієнти повинні слухати ACTION_STATE_CHANGED, щоб отримувати повідомлення про наступні зміни стану адаптера. Якщо цей виклик повернеться істинним, стан адаптера негайно перейде від STATE_OFF до STATE_TURNING_ON, а через деякий час перейде до STATE_OFF або STATE_ON. Якщо цей виклик повернеться помилковим, то виникла негайна проблема, яка не дозволить адаптеру ввімкнутись - наприклад, режим літака або адаптер вже ввімкнено.

ОНОВЛЕННЯ:

Гаразд, так як реалізувати слухач 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;
            }
        }
    }
};

А як зареєструвати / скасувати реєстрацію приймача? (У вашому Activityкласі)

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

1
якщо ви додаєте BLUETOOTH_ADMINдозвіл, це працює, але якщо ні, то вам потрібно використовувати startActivityForResult(enableBtIntent, 0);Bluetooth, щоб увімкнути Bluetooth
— Majid Golshadi

1
виділена інформація цитується з документів BluetoothAdapter, спеціально для методу enable ().
— Кевін Лі

Ей, документи говорять, що 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.це означає? Для екс. Я зробив невеликий додаток з вашого коду, і він спрацював. Але якщо я хочу завантажити в Play Store, він не буде працювати?
— Хілал

@Hilal це буде працювати. Але користувачі повинні дати згоду перед встановленням. Вони побачать такий діалог: pewinternet.org/2015/11/10/…
— Caner

23

Щоб увімкнути Bluetooth, ви можете скористатися однією з наступних функцій:

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

Друга функція:

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

Різниця полягає в тому, що перша функція змушує програму просити у користувача дозволу ввімкнути Bluetooth або заборонити. Друга функція змушує додаток безпосередньо вмикати Bluetooth.

Для відключення Bluetooth використовуйте таку функцію:

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

ПРИМІТКА. Перша функція потребує лише наступного дозволу, який визначається у файлі AndroidManifest.xml:

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

Хоча для другої та третьої функцій потрібні такі дозволи:

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

я думаю, що параметр (Перегляд подання) не
— потрібен

6

Розв’язання прижина працювало для мене ідеально. Справедливо зазначити, що потрібні два додаткові дозволи:

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

Коли вони додані, включення та відключення працює бездоганно за допомогою Bluetooth-адаптера за замовчуванням.


4

Я використав код нижче, щоб відключити BT, коли мій додаток запускається і працює нормально. Не впевнений, чи правильно це реалізувати, оскільки Google рекомендує не використовувати "bluetooth.disable ();" без явних дій користувача, щоб вимкнути Bluetooth.

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

Я використав лише дозвіл нижче.

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

2

Додайте в файл маніфесту такі дозволи:

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

Увімкнути використання Bluetooth через це

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

Вимкнути використання Bluetooth через це

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

0

спробуйте це:

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

Додайте ці дозволи в маніфест

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.