gpt4 book ai didi

Android 12 蓝牙权限困惑

转载 作者:行者123 更新时间:2023-12-04 23:47:02 24 4
gpt4 key购买 nike

所以在 API 31 中有新的蓝牙权限。我想用这个打开或关闭蓝牙:

private void changeBluetoothState(boolean status) {
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (status)
mBluetoothAdapter.enable();
else mBluetoothAdapter.disable();
}
在 list 中我已经有了这个:
<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" />
Android 文档说要添加 android:maxSdkVersion="30"如果针对 API 31 或更高版本,则需要上述蓝牙权限。我还在 Android Studio 中收到一个错误,即 enable() 和 disable() 函数需要 "android.permission.BLUETOOTH_CONNECT" .
  • 如果添加 android:maxSdkVersion="30"告诉系统忽略
    关于更高 API 的声明是可选的而不是强制性的,
    这是否意味着不添加它将允许该语句起作用
    更高的 API?
  • 如果 "android.permission.BLUETOOTH_CONNECT"是允许我的应用程序
    与其他蓝牙设备交互那么为什么需要
    启用或禁用原始设备上的蓝牙适配器?
  • 如果需要在运行时请求 BLUETOOTH_CONNECT 权限
    正确的完整方法是什么?意思是检查它是否已经
    授予然后请求它,如果不是。我没有 Android 12 设备所以
    无法测试此代码。
  • 最佳答案

    针对 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" />
    就像你说的那样,BLUETOOTH_SCAN 是不够的,你需要 BLUETOOTH_CONNECT (如果你决定像我一样要求用户启用蓝牙,通过操作 BluetoothAdapter.ACTION_REQUEST_ENABLE 开始一个新的 startActivityForResult)

    If the BLUETOOTH_CONNECT permission needs to be requested at runtime what is the correct full way to do it? Meaning checking if it's already granted then requesting it if it's not. I have no Android 12 device so no way to test this code.


    是的,在 Android < 12(不再需要)上询问位置权限的方式相同,但同时询问 BLUETOOTH_SCAN 和 BLUETOOTH_CONNECT

    关于Android 12 蓝牙权限困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70883152/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com