相关文章推荐
酷酷的金鱼  ·  How to Effectively ...·  9 月前    · 
安静的苦瓜  ·  C# WPF ...·  1 年前    · 
强悍的苦瓜  ·  sql - SYNTAX ...·  1 年前    · 

Android11 蓝牙权限详解

Android 11 引入了一些新的权限控制和限制,其中包括了对蓝牙权限的改变。本文将详细介绍 Android 11 中的蓝牙权限,并提供相应的代码示例。

蓝牙权限的改变

在 Android 11 中,对蓝牙权限进行了以下改变:

  • ACCESS_FINE_LOCATION 权限现在是访问蓝牙的必需权限,而不再是可选权限。
  • 请求 ACCESS_FINE_LOCATION 权限后,应用需要在前台运行或具有可见的通知,以保持对蓝牙的访问权限。
  • 对于已经配对的蓝牙设备,应用无需进行额外的权限请求。
  • 下面将分别介绍这些改变,并提供相应的代码示例。

    ACCESS_FINE_LOCATION 权限的必需性

    在 Android 11 中,要访问蓝牙设备,必须请求 ACCESS_FINE_LOCATION 权限。当应用需要访问蓝牙时,需要首先请求该权限。

    // 检查是否已经拥有 ACCESS_FINE_LOCATION 权限
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
        != PackageManager.PERMISSION_GRANTED) {
        // 请求 ACCESS_FINE_LOCATION 权限
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                REQUEST_PERMISSION_FINE_LOCATION);
    } else {
        // 已有 ACCESS_FINE_LOCATION 权限,可以进行蓝牙操作
        // ...
    

    保持蓝牙权限的方式

    在 Android 11 中,应用请求 ACCESS_FINE_LOCATION 权限后,需要保持在前台运行或具有可见的通知,以保持对蓝牙的访问权限。否则,在应用进入后台时,蓝牙将不可用。

    // 创建一个前台服务的通知
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_notification)
            .setContentTitle(getString(R.string.notification_title))
            .setContentText(getString(R.string.notification_content))
            .setPriority(NotificationCompat.PRIORITY_DEFAULT);
    // 将服务设置为前台服务
    startForeground(NOTIFICATION_ID, builder.build());
    

    已配对蓝牙设备的访问权限

    对于已经配对的蓝牙设备,应用无需进行额外的权限请求。可以直接使用已配对的设备进行蓝牙操作。

    // 获取已配对的蓝牙设备列表
    Set<BluetoothDevice> pairedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
    // 遍历已配对的设备列表,并进行操作
    for (BluetoothDevice device : pairedDevices) {
        // 对已配对的设备进行蓝牙操作
        // ...
    

    Android 11 对蓝牙权限进行了一些改变,现在需要请求 ACCESS_FINE_LOCATION 权限并保持应用在前台运行或具有可见的通知。对于已配对的设备,无需额外的权限请求。

    本文提供了相应的代码示例,帮助开发者在 Android 11 中正确处理蓝牙权限。希望能对大家有所帮助。

    java 类字段给定一个默认值 java string默认值

    如果我们不做任何初始化工作,变量具有什么默认值,或者是否具有默认值? 其实,成员变量在创建时,系统会为其分配一个默认值。不同类型的变量,默认值也不相同。 例:package deep; public class DefaultValue { // 实例成员变量 private boolean bool; private byte b; private short s;