此bounty已结束。回答此问题可获得+100声望奖励。赏金宽限期在16小时后结束。Pratik Popat正在寻找一个答案从一个有信誉的来源。
仅在Android 13 Pixel设备的生产应用中观察到一些崩溃。
所有蓝牙相关权限都在清单中声明,附近设备运行时权限也在适当位置。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="auto">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission
android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="33" />
<uses-permission
android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation"
tools:ignore="UnusedAttribute" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
android:maxSdkVersion="31" />
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
android:maxSdkVersion="31" />
</manifest>
崩溃日志:
Fatal Exception: java.lang.SecurityException: Need BLUETOOTH PRIVILEGED permission: Neither user 10370 nor current process has android.permission.BLUETOOTH_PRIVILEGED.
at android.app.ContextImpl.enforce(ContextImpl.java:2240)
at android.app.ContextImpl.enforceCallingOrSelfPermission(ContextImpl.java:2268)
at android.content.ContextWrapper.enforceCallingOrSelfPermission(ContextWrapper.java:948)
at com.android.bluetooth.Utils.enforceBluetoothPrivilegedPermission(Utils.java:411)
at com.android.bluetooth.gatt.GattService.permissionCheck(GattService.java:474)
at com.android.bluetooth.gatt.GattService.registerForNotification(GattService.java:3801)
at com.android.bluetooth.gatt.GattService$BluetoothGattBinder.registerForNotification(GattService.java:1085)
at com.android.bluetooth.gatt.GattService$BluetoothGattBinder.registerForNotification(GattService.java:1073)
at android.bluetooth.IBluetoothGatt$Stub.onTransact(IBluetoothGatt.java:812)
at android.os.Binder.execTransactInternal(Binder.java:1285)
at android.os.Binder.execTransact(Binder.java:1244)
3条答案
按热度按时间mrphzbgm1#
我被告知android 12(API级别31)出现了问题,android.permission.BLUETOOTH_PRIVILEGED权限是特权的,不适用于第三方应用程序
lf3rwulv2#
已更改Android 12(API 31)的蓝牙权限。
Android 12引入了BLUETOOTH_SCAN、BLUETOOTH_ADVERTISE和BLUETOOTH_CONNECT权限,允许应用扫描附近的设备(NearBy),而无需请求位置权限(ACCESS_FINE_LOCATION)。
1.如果您的应用程序查找蓝牙设备,如BLE外设,请声明BLUETOOTH_SCAN权限。
1.如果您的应用程序使当前设备可被其他蓝牙设备发现,请声明BLUETOOTH_ADVERTISE权限。
1.如果您的应用程序与配对的蓝牙设备通信,请声明BLUETOOTH_CONNECT权限。
1.对于旧版蓝牙相关权限声明,请将android:maxSdkVersion设置为30。此应用兼容性步骤可帮助系统仅授予安装在运行Android 12或更高权限的设备上的应用所需的蓝牙权限。
由于这三个蓝牙权限是运行时权限,因此必须在应用中明确请求用户同意,才能发现蓝牙设备。因此,存在蓝牙连接许可检查的问题。我们从这个Angular (BLUETOOTH_CONNECT)出发,分析权限检查机制。
oyt4ldly3#
在某些情况下,注册通知仅限于具有
BLUETOOTH_PRIVILEGED
权限的应用,该权限通常仅适用于系统应用。您可能正在尝试注册通知,例如在HID服务上注册通知,该服务被禁止用于一般应用程序访问。或者至少Android系统认为(通过查看其GATT缓存)该特征是敏感的。