Wear OS设备蓝牙权限申请异常问题求助
Wear OS(Pixel智能手表)蓝牙权限申请异常问题
开发一款仅基于Wear OS设备(Pixel智能手表)、无需手机配合的室内导航应用,目前在蓝牙权限申请环节遇到问题,查阅官方文档后仍对部分权限规则是否适用于Wear OS而非仅手机端Android存在困惑。
Manifest权限配置
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
原本可能不需要全部权限,但因子集权限无法生效,遂添加所有相关权限,问题仍未解决。
Activity权限申请代码
val permissions = arrayOf( Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.BLUETOOTH_ADVERTISE, Manifest.permission.BLUETOOTH_CONNECT, Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, ) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ... val permissionsLeft = ArrayList<String>() permissions.forEach { if (ContextCompat.checkSelfPermission(this, it) != PackageManager.PERMISSION_GRANTED) { permissionsLeft.add(it) Log.i("TEST", "permission missing: $it") } } if (permissionsLeft.isNotEmpty()) { ActivityCompat.requestPermissions(this, permissionsLeft.toTypedArray(), 1); }
权限表现异常情况
- 仅首次安装运行(删除后重装)时弹出权限确认对话框,但仅需确认位置权限,无任何蓝牙权限相关提示;Logcat显示BLUETOOTH和BLUETOOTH_ADMIN已被授予。
- 确认位置权限后,后续运行时Logcat显示仅缺少BLUETOOTH_ADVERTISE、BLUETOOTH_CONNECT、BLUETOOTH_SCAN权限,但这些权限既无法弹出申请对话框,也未出现在应用权限设置列表中。
onRequestPermissionsResult实现
override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<String>, grantResults: IntArray ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) when (requestCode) { REQUEST_CODE -> { if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { Log.i("TEST", "Granted") } else { Log.i("TEST", "Not Granted") } } } }
上述剩余权限始终进入Not Granted分支,且无任何用户交互。
------ 更新 ------
- 发现即使未获得BLUETOOTH_ADVERTISE、BLUETOOTH_CONNECT、BLUETOOTH_SCAN权限,仍可调用
bluetoothAdapter.startDiscovery()等本应受权限限制的功能,不确定是Bug、Wear OS特例还是理解有误。 - 如图所示,生成的权限检查逻辑会因权限未授予而阻止执行
device!!.name;但为函数添加@SuppressLint("MissingPermission")注解、跳过权限检查时,功能可正常运行。

内容的提问来源于stack exchange,提问作者user2267367
相关产品推荐
相关产品推荐

