如何解决Android 12 新蓝牙权限
蓝牙是我们应用的主要依赖项。因此,我们已经尝试实施新的 Android 12 蓝牙权限。我们唯一的资源是Android developers New Bluetooth permissions in Android 12。只是说添加权限
"android.permission.BLUetoOTH_CONNECT"
"android.permission.BLUetoOTH_SCAN"
我添加并获得了两个和当然位置的运行时权限(通常为 pre 12))。
我的代码库中没有其他变化。应该?我不知道。所以,问题是我的应用程序找不到 BLE 设备。我找不到原因。
您有什么建议或资源吗?
解决方法
如果您希望您的应用启动设备发现或操作 蓝牙设置,必须在里面声明BLUETOOTH_ADMIN权限 除了 BLUETOOTH 权限。大多数应用程序需要此权限 仅用于发现本地蓝牙设备的能力。不要使用 此权限授予的其他能力,除非该应用程序是 “电源管理器”,可根据用户请求修改蓝牙设置。 在您的应用清单文件中声明蓝牙权限
从 developer android 我们看到您必须添加
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
在你的清单文件中,但你没有添加它来发现其他设备我认为这是你的问题的来源
,我不确定他们是否宣布了有关蓝牙更改的任何内容,但如果没有其他帮助,他们最近推出了这可能对您的用例有所帮助,除非您做更复杂的事情。
https://developer.android.com/guide/topics/connectivity/companion-device-pairing#kotlin
在较新的版本中,如果这可以满足您的所有需求,您也不再需要位置权限。
关于示例:您可以不包含这两行:
.setNamePattern(Pattern.compile("My device"))
.addServiceUuid(ParcelUuid(UUID(0x123abcL,-1L)),null)
我用它来搜索设备没有任何问题,连接工作类似
,我刚刚添加到清单中:
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
然后我像其他任何人一样从 Main Activity 请求这些权限。 为了请求许可,我正在使用图书馆
implementation 'pub.devrel:easypermissions:3.0.0'
那么你就可以调用这个函数了
public static final String[] BLUETOOTH_PERMISSIONS_S = { Manifest.permission.BLUETOOTH_SCAN,Manifest.permission.BLUETOOTH_CONNECT} ;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
if (!EasyPermissions.hasPermissions(this,BLUETOOTH_PERMISSIONS_S)) {
EasyPermissions.requestPermissions(this,message,yourRequestCode,BLUETOOTH_PERMISSIONS_S);
}
}
并覆盖 onRequestPermissionResult
@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode,grantResults,this);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。