Android 13 -需要BLUETOOTH PRIVILEGED权限?

qgelzfjb  于 2023-05-12  发布在  Android
关注(0)|答案(3)|浏览(1887)

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)
mrphzbgm

mrphzbgm1#

我被告知android 12(API级别31)出现了问题,android.permission.BLUETOOTH_PRIVILEGED权限是特权的,不适用于第三方应用程序

lf3rwulv

lf3rwulv2#

已更改Android 12(API 31)的蓝牙权限。
Android 12引入了BLUETOOTH_SCANBLUETOOTH_ADVERTISEBLUETOOTH_CONNECT权限,允许应用扫描附近的设备(NearBy),而无需请求位置权限(ACCESS_FINE_LOCATION)。
1.如果您的应用程序查找蓝牙设备,如BLE外设,请声明BLUETOOTH_SCAN权限。
1.如果您的应用程序使当前设备可被其他蓝牙设备发现,请声明BLUETOOTH_ADVERTISE权限。
1.如果您的应用程序与配对的蓝牙设备通信,请声明BLUETOOTH_CONNECT权限。
1.对于旧版蓝牙相关权限声明,请将android:maxSdkVersion设置为30。此应用兼容性步骤可帮助系统仅授予安装在运行Android 12或更高权限的设备上的应用所需的蓝牙权限。
由于这三个蓝牙权限是运行时权限,因此必须在应用中明确请求用户同意,才能发现蓝牙设备。因此,存在蓝牙连接许可检查的问题。我们从这个Angular (BLUETOOTH_CONNECT)出发,分析权限检查机制。

<uses-permission android:name="android.print.BLUETOOTH " />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
    <uses-permission android:name="android .permission. BLUETOOTH_DEBUG"/>
oyt4ldly

oyt4ldly3#

在某些情况下,注册通知仅限于具有BLUETOOTH_PRIVILEGED权限的应用,该权限通常仅适用于系统应用。
您可能正在尝试注册通知,例如在HID服务上注册通知,该服务被禁止用于一般应用程序访问。或者至少Android系统认为(通过查看其GATT缓存)该特征是敏感的。

相关问题