'android enable disable bluetooth via command line

I am trying to enable disable bluetooth on android device using command line.

I can enable it using

adb shell am start -a android.bluetooth.adapter.action.REQUEST_ENABLE

But it prompts user to 'allow' or 'deny'.

I also see there is option to launch ble settings first like

adb shell am start -a android.settings.BLUETOOTH_SETTINGS

and then enable disable adb shell input keyevent **

But it won't be device independent.



Solution 1:[1]

For bluetooth status:

adb shell settings get global bluetooth_on 

or

adb shell settings list global |grep ^bluetooth_on

Enable Bluetooth

adb shell settings put global bluetooth_on 1

Disable Bluetooth

adb shell settings put global bluetooth_on 0

Via am - Instead of request, use enable

adb shell am broadcast -a android.intent.action.BLUETOOTH_ENABLE --ez state true

Via Keyevents

adb shell am start -a android.settings.BLUETOOTH_SETTINGS 
adb shell input keyevent 19
adb shell input keyevent 23

Edit 2019-06-22:

Finally figured out a way to toggle bluetooth on/off on Android 8.0 and newer versions without root, "bluetooth_on" doesn't seems to work on latest android versions anymore:

Enable Bluetooth - No root required

  adb shell settings put global bluetooth_disabled_profiles 1 

Disable Bluetooth - No root required

  adb shell settings put global bluetooth_disabled_profiles 0

And since above works fine then of course content works fine aswell:

Enable Bluetooth - No root required

 adb shell content insert --uri content://settings/global --bind name:s:bluetooth_disabled_profiles --bind value:s:1 --user 0 

Disable Bluetooth - No root required:

 adb shell content insert --uri content://settings/global --bind name:s:bluetooth_disabled_profiles --bind value:s:0 --user 0 

Solution 2:[2]

To enable:

adb shell service call bluetooth_manager 6

To disable:

adb shell service call bluetooth_manager 8

Solution 3:[3]

To enable

svc bluetooth enable

To disable

svc bluetooth disable

Solution 4:[4]

For folks who are wondering from where did the numbers 6 and 8 came from. It came from this aidl file: https://android.googlesource.com/platform/system/bt/+/master/binder/android/bluetooth/IBluetoothManager.aidl Start counting from the first function listed in this aidl and you will see the enable function is the 6th one and the disable is the 8th one in the list.

Solution 5:[5]

To run commands listed in previous comment, you need to be root:

adb root

Enable:

adb shell service call bluetooth_manager 6

Disable:

adb shell service call bluetooth_manager 8

Solution 6:[6]

To enable:

adb shell service call bluetooth_manager 6

To disable:

adb shell service call bluetooth_manager 9

Tested and worked on a Samsung Galaxy S7.

Solution 7:[7]

This might be a bit of a hacky solution but once you try to enable or disable bluetooth, you can use the right key action followed by the enter key action to select the allow button which is usually on the very right.

This should work even if your device is not rooted.

To enable:

adb shell am start -a android.bluetooth.adapter.action.REQUEST_ENABLE
adb shell input keyevent 22 (right)
adb shell input keyevent 22 (right)
adb shell input keyevent 66 (enter)

To disable:

adb shell am start -a android.bluetooth.adapter.action.REQUEST_DISABLE
adb shell input keyevent 22 (right)
adb shell input keyevent 22 (right)
adb shell input keyevent 66 (enter)

Solution 8:[8]

As awm129 has pointed out, solutions using service call aren't device-independent. While I am unable to completely eliminate the use of service call, the following solution should be more device-independent:

To disable:

pm disable com.android.bluetooth

To enable:

pm enable com.android.bluetooth
service call bluetooth_manager 6

I hope someone will eventually find a service call-free solution.

Solution 9:[9]

On Xiaomi Mi 4i / MIUI 9:

To enable:

adb shell service call bluetooth_manager 8

To disable:

adb shell service call bluetooth_manager 10

This can also run within Andorid like:

service call bluetooth_manager 10

Solution 10:[10]

The best way to use settings put, svc, and actions.

It works for all Android versions and all devices.

val isOn =true

val command = "adb shell settings put global bluetooth_on ${
    if (isOn) {
        "1"
    } else {
        "0"
    }
} && adb shell svc bluetooth ${
    if (isOn) {
        "enable"
    } else {
        "disable"
    }
} && adb shell am start -a android.bluetooth.adapter.action.${
    if (isOn) {
        "REQUEST_ENABLE"
    } else {
        "REQUEST_DISABLE"
    }
} && adb shell am broadcast -a android.intent.action.BLUETOOTH_ENABLE --ez state $isOn"

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Alex P.
Solution 3 Hari Nandha
Solution 4 VinPat
Solution 5 Marcos VinĂ­cios Scarpim
Solution 6 Aiden
Solution 7 Safa
Solution 8 Alex Vong
Solution 9
Solution 10 Rasoul Miri