Как программно включить / отключить bluetooth в android

104

Хочу через программу включить / отключить блютуз. У меня есть следующий код.

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

Но этот код не работает в SDK 1.5. Как заставить его работать?

user458295
источник
Как это не работает? Вы получаете сообщение об ошибке? Если да, то в чем ошибка?
Адам Дрисколл,
1
BluetoothAdapter показывает ошибку в SDK 1.5
user458295,

Ответы:

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"/>
Приджин
источник
это действительно работает и для меня. простой способ отключить блютуз в устройствах android. спасибо большое, приятель.
Амит Тапер,
7
если вы добавляете разрешение BLUETOOTH_ADMIN, это работает, но если нет, вам нужно использовать startActivityForResult (enableBtIntent, 0); чтобы включить Bluetooth
Маджид Гольшади
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. Если этот вызов возвращает false, значит возникла непосредственная проблема, которая не позволяет включить адаптер - например, режим полета или адаптер уже включен.

ОБНОВИТЬ:

Итак, как реализовать прослушиватель 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
Маджид Гольшади
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

Решение prijin отлично сработало для меня. Будет справедливо упомянуть, что необходимы два дополнительных разрешения:

<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"/>
Бапусахеб Шинде
источник