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);
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...