Can enable bluetooth android

How to enable/disable bluetooth programmatically in android

For this to work, you must have the following permissions:

it really works for me also. simple method to disconnect the bluetooth in android devices. thanks a lot buddy.

if you add BLUETOOTH_ADMIN permission it’s work but if not you need to use startActivityForResult(enableBtIntent, 0); to enable your bluetooth

Thanks for your useful answer +1 . just I want to add for who doesn’t know how to enable it: mBluetoothAdapter.enable()

Those manifest permissions do not work for me in 2022. The correct one is android.permission.BLUETOOTH_CONNECT . Otherwise it will give permission but will not disable.

Here is a bit more robust way of doing this, also handling the return values of enable()\disable() methods:

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

And add the following permissions into your manifest file:

But remember these important points:

This is an asynchronous call: it will return immediately, and clients should listen for ACTION_STATE_CHANGED to be notified of subsequent adapter state changes. If this call returns true, then the adapter state will immediately transition from STATE_OFF to STATE_TURNING_ON, and some time later transition to either STATE_OFF or STATE_ON. If this call returns false then there was an immediate problem that will prevent the adapter from being turned on — such as Airplane mode, or the adapter is already turned on.

Ok, so how to implement bluetooth listener?:

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

And how to register/unregister the receiver? (In your Activity class)

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

if you add BLUETOOTH_ADMIN permission it’s work but if not you need to use startActivityForResult(enableBtIntent, 0); to enable your bluetooth

hey, the docs say that 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. What does it mean? For ex. I made a little app from your code and it worked. But if I want to upload to Play Store, it won’t work?

Читайте также:  Bmw mini cooper bluetooth

@Hilal it will work. But users need to give consent before installation. They will see a dialog like this: pewinternet.org/2015/11/10/…

Android BluetoothAdapter docs say it has been available since API Level 5. API Level 5 is Android 2.0.

You can try using a backport of the Bluetooth API (have not tried it personally): http://code.google.com/p/backport-android-bluetooth/

To Enable the Bluetooth you could use either of the following functions:

The difference is that the first function makes the app ask the user a permission to turn on the Bluetooth or to deny. The second function makes the app turn on the Bluetooth directly.

To Disable the Bluetooth use the following function:

NOTE/ The first function needs only the following permission to be defined in the AndroidManifest.xml file:

While, the second and third functions need the following permissions:

The solution of prijin worked perfectly for me. It is just fair to mention that two additional permissions are needed:

When these are added, enabling and disabling works flawless with the default bluetooth adapter.

I used the below code to disable BT when my app launches and works fine. Not sure if this the correct way to implement this as google recommends not using «bluetooth.disable();» without explicit user action to turn off Bluetooth.

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

I only used the below permission.

One may have problems with this method if the app is dependent on Bluetooth being off because there is a race condition since bluetooth.disable() is asynchronous.

You must perform the standard permission request for BLUETOOTH_CONNECT as you would when requesting permission for storage or other «prompted» items.

val bluetoothAdapter = (getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager).adapter if (bluetoothAdapter.isEnabled) bluetoothAdapter.disable() 

For Android 12 and above, BLUETOOTH and BLUETOOTH_ADMIN permissions are not necessary to retrieve the current state or toggle it, unless targeting lower APIs.

This doesn’t seem to work, are you sure it’s supported on Android 12+? I tested on a Pixel 5 running Android 13

@behelit Android 13 removed the ability to enable and disable the adapter. No alternative, just stripped it from the developers.

BluetoothAdapter is deprecated from Android OS13. Is there any alternate to enable the bluetooth programatically on OS13?

@tklanilkumar Google specifically removed that option. It appears you are stuck with using the intents now. Google is creating the illusion of safety through poorly designed and excessive popups. The more it has to look like malware, the less likely you are to bother at all or something like that.

Читайте также:  Ошибка подключения службы bluetooth

I have made a class to handle almost all this in Kotlin using Coroutines

 class ActivityResultHandler( private val registry: ActivityResultRegistry ) < private val handlers = mutableListOf>() fun unregisterHandlers() < handlers.forEach < it.unregister() >> suspend fun requestLocationPermission(): Boolean < return suspendCoroutine < continuation ->val launcher = registry.register( LOCATION_PERMISSION_REQUEST, // lifecycleOwner, ActivityResultContracts.RequestPermission() ) < continuation.resumeWith(Result.success(it)) >handlers.add(launcher) launcher.launch(Manifest.permission.ACCESS_FINE_LOCATION) > > suspend fun requestBluetoothActivation(): Boolean < return suspendCoroutine < continuation ->val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE) val launcher = registry.register( BLUETOOTH_ON_REQUEST, // lifecycleOwner, ActivityResultContracts.StartActivityForResult() ) < result ->continuation.resume( result.resultCode == Activity.RESULT_OK ) > handlers.add(launcher) launcher.launch(enableBtIntent) > > fun checkLocationPermission(context: Context): Boolean < return ContextCompat.checkSelfPermission( context, Manifest.permission.ACCESS_FINE_LOCATION ) == PackageManager.PERMISSION_GRANTED >private suspend fun requestLocationActivation( intentSenderRequest: IntentSenderRequest, ): Boolean < return suspendCoroutine < continuation ->val launcher = registry.register( LOCATION_ACTIVATION_REQUEST, // lifecycleOwner, ActivityResultContracts.StartIntentSenderForResult() ) < continuation.resume(it.resultCode == Activity.RESULT_OK) >handlers.add(launcher) launcher.launch(intentSenderRequest) > > suspend fun enableLocation(context: Context): Boolean = suspendCoroutine < continuation ->val locationSettingsRequest = LocationSettingsRequest.Builder() // .setNeedBle(true) .addLocationRequest( LocationRequest.create().apply < priority = LocationRequest.PRIORITY_HIGH_ACCURACY >) .build() val client: SettingsClient = LocationServices.getSettingsClient(context) val task: Task = client.checkLocationSettings(locationSettingsRequest) task.addOnSuccessListener < continuation.resume(true) >task.addOnFailureListener < exception ->if (exception is ResolvableApiException && exception.statusCode == LocationSettingsStatusCodes.RESOLUTION_REQUIRED ) < val intentSenderRequest = IntentSenderRequest.Builder(exception.resolution).build() CoroutineScope(continuation.context).launch < val result = requestLocationActivation(intentSenderRequest) continuation.resume(result) >> else < continuation.resume(false) >> > companion object < private const val LOCATION_PERMISSION_REQUEST = "LOCATION_REQUEST" private const val BLUETOOTH_ON_REQUEST = "LOCATION_REQUEST" private const val LOCATION_ACTIVATION_REQUEST = "LOCATION_REQUEST" >> 
// make sure you extend AppCompatActivity class MainActivity : AppCompatActivity() < private val permissionRequests = ActivityResultHandler(activityResultRegistry) override fun onCreate(savedInstanceState: Bundle?) < super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // use viewmodels and fragments instead of GlobalScope GlobalScope.launch < // turn on bluetooth permissionRequests.requestBluetoothActivation() // to be able to scan for devices you also need location permission // also show pop up to let users know why you need location // https://support.google.com/googleplay/android-developer/answer/9799150?hl=en permissionRequests.requestLocationPermission() // also you need navigation to be enabled permissionRequests.enableLocation(this@MainActivity) >> override fun onDestroy() < super.onDestroy() permissionRequests.unregisterHandlers() >> 

coroutines dependency in gradle

also add this permissions to manifest

Источник

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.

10 Answers 10

Updated: 2023-03-10 — Android 12/13

Enable bluetooth via cmd

adb shell cmd bluetooth_manager enable 

Disable bluetooth cmd

adb shell cmd bluetooth_manager disable 

Updated: 2019-06-22: — Android 11

adb shell settings get global bluetooth_on adb shell settings list global |grep ^bluetooth_on 

Enable Bluetooth via settings

adb shell settings put global bluetooth_disabled_profiles 1 

Disable bluetooth settings

adb shell settings put global bluetooth_disabled_profiles 0 

Enable bluetooth via content

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

Disable bluetooth content

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

Android 11/12/13 and older versions

Enable Bluetooth

adb shell settings put global bluetooth_on 1 

Disable Bluetooth

adb shell settings put global bluetooth_on 0 

Enable bluetooth via activity manager

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

Disable bluetooth via activity manager

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

Enable/Disable bluetooth via keyevents

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

On Huawei P30 Pro with Android P even your new solution doesn’t work. When I use adb shell settings put global bluetooth_disabled_profiles 1 , it disables bluetooth (as opposite to what you say) and adb shell settings put global bluetooth_disabled_profiles 0 does nothing, it doesn’t enable nor disable it.

Читайте также:  Блютуз колонка ручной работы

See if they have changed the name so it might be bluetooth_on instead of bluetooth_disabled_profiles. If you type ‘adb shell settings list global|grep -i bluetooth’ you should get some alternatives what you can try if above dosn’t work so just change name and value if needed, above works fine on Huawei P9, Samsung S8 and Huawei P8 that’s all I have tried on with Android 8.0 & Android 9.0. Regards

for me, all of these methods from 2019 edit (both disable and enable) disable bluetooth for just a very quick amount of time. It rather looks like a reset. Samsung A50, Android 10 (kernel 4.14 )

adb shell settings put global bluetooth_on 0 worked for me in android 12.1 — but is there anyway that I can make it non-persistent so that behavior is same after each boot? When settings put global bluetooth_on 0 — it retains the value and next time I reboot, I notice that boot_completed never gets set to 1. Unless I wipe /data partition and restart again and re-put settings put global bluetooth_on 0 .

adb shell service call bluetooth_manager 6 
adb shell service call bluetooth_manager 8 

We are trying to enable and disable Bluetooth before we start our automation test using adb commands Enable adb shell service call bluetooth_manager 6 Disable adb shell service call bluetooth_manager 9 We are getting the Bluetooth status using this command adb shell settings get global bluetooth_on Are there any other work around to enable and disable the bluetooth using APPIUM java because these commands working in some devices but not in all the device. Any solution for this? The same commands working in Android 5 (Lollipop)

using static method codes as suggested here will never work across all devices. These codes can and do change on a per device basis depending on vendor and OEM modifications.

Источник

Оцените статью
Adblock
detector