Invalid Name Invalid Name - 19 days ago 20
Android Question

android lolipop java.lang.SecurityException: Neither user nor current process has android.permission.BLUETOOTH_PRIVILEGED

I'm currently working on a Android application that connects to a device via Bluetooth using Eclipse (Java). Currently I have it working on Android 4.4 (Kit-Kat) and below, but after the new update which is Android 5 (Lolipop). Security exception occurs.

Manifest:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
<uses-feature android:name="android.hardware.bluetooth_le"
android:required="false" />


Code:

mBleScanner.startScan(filters, scanSettings, mLeScanCallback);

private ScanCallback mLeScanCallback = new ScanCallback()
{
@Override
public void onScanResult(int callbackType, ScanResult result)
{
BluetoothDevice device = result.getDevice();
if(device.getName() != null)
{
if(device.getName().toUpperCase().contains("MyDevice"))
{

mBleScanner.stopScan(mLeScanCallback);

if (device.getBondState() == BluetoothDevice.BOND_BONDED)
{
Connect(device.getAddress().toString());
}
else
{
// pair device
device.setPairingConfirmation(true);
device.createBond();
}
}
}
}
};
...
..
.
private void BondDevice(BluetoothGattCharacteristic bgc, boolean pnEnable)
{
boolean bool = gatt.setCharacteristicNotification(bgc, true); // this line throw security exception
BluetoothGattDescriptor bgd=bgc.getDescriptor(UUID.fromString(BLE_DESCRIPTOR_NOTIFY));

byte[] arrayOfByte = pnEnable ? BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE:
BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE;
gattDescriptor.setValue(arrayOfByte);
mBluetoothGatt.writeDescriptor(bgd);
}


Stack Trace:

04-27 12:36:24.559: W/BluetoothGatt(17764): Unhandled exception in callback
04-27 12:36:24.559: W/BluetoothGatt(17764): java.lang.SecurityException: Need BLUETOOTH_PRIVILEGED permission: Neither user 10215 nor current process has android.permission.BLUETOOTH_PRIVILEGED.
04-27 12:36:24.559: W/BluetoothGatt(17764): at android.os.Parcel.readException(Parcel.java:1540)
04-27 12:36:24.559: W/BluetoothGatt(17764): at android.os.Parcel.readException(Parcel.java:1493)
04-27 12:36:24.559: W/BluetoothGatt(17764): at android.bluetooth.IBluetoothGatt$Stub$Proxy.registerForNotification(IBluetoothGatt.java:1163)
04-27 12:36:24.559: W/BluetoothGatt(17764): at android.bluetooth.BluetoothGatt.setCharacteristicNotification(BluetoothGatt.java:1239)
04-27 12:36:24.559: W/BluetoothGatt(17764): at com.vibease.ap3.service.ServiceBLE.BondDevice(ServiceBLE.java:568)
04-27 12:36:24.559: W/BluetoothGatt(17764): at com.vibease.ap3.service.ServiceBLE.CheckDevice(ServiceBLE.java:518)
04-27 12:36:24.559: W/BluetoothGatt(17764): at com.vibease.ap3.service.ServiceBLE.access$7(ServiceBLE.java:493)
04-27 12:36:24.559: W/BluetoothGatt(17764): at com.vibease.ap3.service.ServiceBLE$2.onServicesDiscovered(ServiceBLE.java:373)
04-27 12:36:24.559: W/BluetoothGatt(17764): at android.bluetooth.BluetoothGatt$1.onSearchComplete(BluetoothGatt.java:309)
04-27 12:36:24.559: W/BluetoothGatt(17764): at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:217)
04-27 12:36:24.559: W/BluetoothGatt(17764): at android.os.Binder.execTransact(Binder.java:446)


Any advice? Thank you.

Answer

Seems like Google change some security on the Bluetooth chip. My Bluetooth chip contain some part in the address that was block by this security. That's why I encountered my problem. Since I used a different chip. Everything works fine now.

P/s: forgot to answer this long time ago

Comments