Android棒棒糖java.lang.SecurityException: 用户和当前进程都没有android.permission.BLUETOOTH_PRIVILEGED
Android lollipop java.lang.SecurityException: Neither user nor current process has android.permission.BLUETOOTH_PRIVILEGED
我目前正在开发一个 Android 应用程序,该应用程序使用 Eclipse (Java) 通过蓝牙连接到设备。目前我在 Android 4.4 (Kit-Kat) 及以下版本上工作,但在 Android 5 (Lollipop) 的新更新之后。发生安全异常。
清单:
<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" />
代码:
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);
}
堆栈跟踪:
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(ServiceBLE.java:493)
04-27 12:36:24.559: W/BluetoothGatt(17764): at com.vibease.ap3.service.ServiceBLE.onServicesDiscovered(ServiceBLE.java:373)
04-27 12:36:24.559: W/BluetoothGatt(17764): at android.bluetooth.BluetoothGatt.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)
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
.
只需添加它要求的权限:
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="21" />
您的目标 SDK 版本是多少?您的应用支持棒棒糖吗?
似乎 Google 更改了蓝牙芯片的一些安全性。我的蓝牙芯片包含被此安全性阻止的地址中的某些部分。这就是我遇到问题的原因。因为我使用了不同的芯片。现在一切正常。
P/s: 很久以前忘记回答
我目前正在开发一个 Android 应用程序,该应用程序使用 Eclipse (Java) 通过蓝牙连接到设备。目前我在 Android 4.4 (Kit-Kat) 及以下版本上工作,但在 Android 5 (Lollipop) 的新更新之后。发生安全异常。
清单:
<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" />
代码:
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);
}
堆栈跟踪:
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(ServiceBLE.java:493)
04-27 12:36:24.559: W/BluetoothGatt(17764): at com.vibease.ap3.service.ServiceBLE.onServicesDiscovered(ServiceBLE.java:373)
04-27 12:36:24.559: W/BluetoothGatt(17764): at android.bluetooth.BluetoothGatt.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)
04-27 12:36:24.559: W/BluetoothGatt(17764): java.lang.SecurityException: Need
BLUETOOTH_PRIVILEGED
permission: Neither user 10215 nor current process hasandroid.permission.BLUETOOTH_PRIVILEGED
.
只需添加它要求的权限:
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="21" />
您的目标 SDK 版本是多少?您的应用支持棒棒糖吗?
似乎 Google 更改了蓝牙芯片的一些安全性。我的蓝牙芯片包含被此安全性阻止的地址中的某些部分。这就是我遇到问题的原因。因为我使用了不同的芯片。现在一切正常。
P/s: 很久以前忘记回答