Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

missing permissions required by BluetoothAdapter.isEnabled.BLUETOOTH

I add bluetooth to my app but am running into the following problem. When I do the code:

BluetoothAdapter bluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
    Toast.makeText(getApplicationContext(),"Device doesnt Support Bluetooth",Toast.LENGTH_SHORT).show();
}

if(!bluetoothAdapter.isEnabled()) {
    Intent enableAdapter = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableAdapter, 0);
}

The error is on the following line:

if(!bluetoothAdapter.isEnabled())

Error:

Missing permissions required by BluetoothAdapter.isEnabled :android.permissions.BLUETOOTH

I added the following permissions to the android manifest file:

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

but am still getting the same issue. Do you know what I did wrong?

like image 901
ComputerGeek101 Avatar asked Oct 22 '16 23:10

ComputerGeek101


People also ask

How do I get permission to scan for Bluetooth?

If your app makes the current device discoverable to other Bluetooth devices, declare the BLUETOOTH_ADVERTISE permission. If your app communicates with already-paired Bluetooth devices, declare the BLUETOOTH_CONNECT permission. For your legacy Bluetooth-related permission declarations, set android:maxSdkVersion to 30 .

Why is location permission required for Bluetooth?

Your app needs this permission because a Bluetooth scan can be used to gather information about the location of the user. This information may come from the user's own devices, as well as Bluetooth beacons in use at locations such as shops and transit facilities.”

How do you check Bluetooth is on or off in android programmatically?

Call isEnabled() to check whether Bluetooth is currently enabled. If this method returns false, then Bluetooth is disabled. To request that Bluetooth be enabled, call startActivityForResult() , passing in an ACTION_REQUEST_ENABLE intent action.


1 Answers

Let's say you have a button and then you click on it, Bluetooth needs to turn on. Here's a quick example how you would do it for Android 6.0 and above.

First, declare this variable in your Activity/Fragment:

public static final int PERMISSION_ASK = 1001;

Now, let's say this buttons is going to enable the bluetooth. setOnClickListener:

myButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if(isBluetoothPermissionGranted()) {
                // app already has required permissions
                // do some task here
            } else {
                // app does not have permission yet.
                // ask for permissions
                askForBluetoothPermissions();
            }
        } else {
            // Android version below 6.0, no need to check or ask for permission
            // do some task here
        }
    }
});

Checking if application already has the required permission:

@RequiresApi(api = Build.VERSION_CODES.M)
private boolean isBluetoothPermissionGranted() {
    boolean granted = false;
    int bluetoothGranted = checkSelfPermission(Manifest.permission.BLUETOOTH);
    int bluetoothAdminGranted = checkSelfPermission(Manifest.permission.BLUETOOTH_ADMIN);

    if(bluetoothGranted == PackageManager.PERMISSION_GRANTED &&
            bluetoothAdminGranted == PackageManager.PERMISSION_GRANTED) {
        granted = true;
    }

    return granted;
}

If required permission is not granted, here's how you would ask for it:

@RequiresApi(api = Build.VERSION_CODES.M)
private void askForBluetoothPermissions() {
    String[] permissions = new String[] {
            Manifest.permission.BLUETOOTH,
            Manifest.permission.BLUETOOTH_ADMIN
    };
    requestPermissions(permissions, PERMISSION_ASK);
}

And finally, here's how you would confirm if the user granted you the permission(s) or not:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_ASK:
            if(grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
                // all requested permissions were granted
                // perform your task here
            } else {
                // permissions not granted
                // DO NOT PERFORM THE TASK, it will fail/crash
            }
            break;
        default:
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            break;
    }
}

Hope this helps

like image 177
ᴛʜᴇᴘᴀᴛᴇʟ Avatar answered Oct 01 '22 10:10

ᴛʜᴇᴘᴀᴛᴇʟ