Як увімкнути / відключити 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.