12 android bluetooth android-permissions
所以在 API 31 中有新的蓝牙权限。我想使用以下命令打开或关闭蓝牙:
private void changeBluetoothState(boolean status) {
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (status)
mBluetoothAdapter.enable();
else mBluetoothAdapter.disable();
}
Run Code Online (Sandbox Code Playgroud)
在清单中我已经有了这个:
<uses-permission
android:name="android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-feature
android:name="android.hardware.bluetooth"
android:required="false" />
Run Code Online (Sandbox Code Playgroud)
Android 文档表示,android:maxSdkVersion="30"如果针对 API 31 或更高版本,则需要添加上述蓝牙权限。我还在 Android Studio 中收到一个错误,指出启用()和禁用()函数需要"android.permission.BLUETOOTH_CONNECT"。
如果添加android:maxSdkVersion="30"告诉系统忽略更高 API 上的语句是可选的而不是强制性的,这是否意味着不添加它将允许该语句在更高 API 上工作?
如果"android.permission.BLUETOOTH_CONNECT"是为了允许我的应用程序与其他蓝牙设备交互,那么为什么需要启用或禁用原始设备上的蓝牙适配器?
如果需要在运行时请求 BLUETOOTH_CONNECT 权限,正确的完整方法是什么?意思是检查它是否已经被授予,如果没有则请求它。我没有 Android 12 设备,因此无法测试此代码。
And*_*obs 13
针对 Android 12,我的工作解决方案是以这种方式声明权限:
<!--Before Android 12 (but still needed location, even if not requested)-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<!--From Android 12-->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
Run Code Online (Sandbox Code Playgroud)
就像你说的,BLUETOOTH_SCAN 是不够的,你需要 BLUETOOTH_CONNECT (如果你像我一样决定要求用户启用蓝牙,并使用操作 BluetoothAdapter.ACTION_REQUEST_ENABLE 启动新的 startActivityForResult )
如果需要在运行时请求 BLUETOOTH_CONNECT 权限,正确的完整方法是什么?意思是检查它是否已经被授予,如果没有则请求它。我没有 Android 12 设备,因此无法测试此代码。
是的,以与在 Android < 12 上请求位置权限相同的方式(不再需要)现在您请求 BLUETOOTH_SCAN 和 BLUETOOTH_CONNECT
| 归档时间: |
|
| 查看次数: |
21527 次 |
| 最近记录: |