После спаривания с BLE устройства функция android.bluetooth.BluetoothDevice.setPairingConfirmation
называется, и это делает сбой приложения:приложения начинает врезаться с конца декабря 2016 года в setPairingConfirmation из-за отсутствующего разрешения BLUETOOTH_ADMIN
Fatal Exception: java.lang.SecurityException: Need BLUETOOTH PRIVILEGED permission: Neither user 10168 nor current process has android.permission.BLUETOOTH_PRIVILEGED. at android.os.Parcel.readException(Parcel.java:1684) at android.os.Parcel.readException(Parcel.java:1637) at android.bluetooth.IBluetooth$Stub$Proxy.setPairingConfirmation(IBluetooth.java:1566) at android.bluetooth.BluetoothDevice.setPairingConfirmation(BluetoothDevice.java:1182) at nl.myapp.ui.main.NotificationFragment.onDeviceSelected(SourceFile:374) at nl.myapp.ui.main.FindGlassDialogFragment.onDeviceClicked(SourceFile:224) at nl.myapp.ui.main.adapters.DeviceAdapter$2.onClick(SourceFile:61) at android.view.View.performClick(View.java:5637) at android.view.View$PerformClick.run(View.java:22429) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
приложение работает нормально, когда он был разработан. Когда я поворачиваю линию device.setPairingConfirmation()
, приложение работает, но устройство Bluetooth не останавливает режим сопряжения.
У меня есть
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
в мой манифест и я попросить разрешения выполнения ACCESS_COARSE_LOCATION в Android версии M и выше.
Я пробовал запрашивать BLUETOOTH_ADMIN и BLUETOOTH_PRIVILEGED как разрешение времени выполнения, но они не запрашивают диалог.
Это ошибка в текущей версии Android? Я уверен, что приложение не сбой, когда оно было выпущено 13 декабря.
Это происходит на Android 6 и 7. Я тестировал его на Nexus 6P с Android 7.1.1.
Ваше приложение не может держать 'BLUETOOTH_PRIVILEGED' как это разрешение «подпись | привилегированное», если ваше приложение не подписано ключом подписи прошивки или не установлено как системное («привилегированное») приложение. 'setPairingConfirmation()' документируется как требование 'BLUETOOTH_PRIVILEGED', поэтому, по-видимому, это работает по назначению. Я не могу объяснить, как это работает раньше, и я не знаю, каким будет обходной путь, если он есть. – CommonsWare
Возможный дубликат [Android Permission BLUETOOTH Manifest error] (http://stackoverflow.com/questions/29786291/android-permission-bluetooth-manifest-error) – petey
Итак, разрешение BLUETOOTH_PRIVILEGED недоступно для 3-х сторонних приложений. Теперь я читаю в документации. Но когда я смотрю на источник setPairingConfirmation(), он требует BLUETOOTH_ADMIN. Возможно, Google изменил это в обновлении безопасности ... – Roel