无法在Wear OS Samsung Galaxy Watch 4上请求蓝牙权限 [英] Cannot request Bluetooth permission on Wear OS Samsung Galaxy Watch 4

查看:25
本文介绍了无法在Wear OS Samsung Galaxy Watch 4上请求蓝牙权限的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了一个示例Wear OS应用程序,它应该可以发现BLE设备,但我的代码需要蓝牙许可。当我将这些行放入清单时:

    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

相应的权限不会显示在设置/应用程序/权限中,并且每个权限请求都不执行任何操作。顺便说一下,我的BLE设备(扬声器和ESP-32)也没有显示在设置/蓝牙中。

如何为我的应用程序授予蓝牙权限,或者如何将BLE设备连接到我的手表?

更新: 我尝试了这些:

        if (checkSelfPermission(Manifest.permission.BLUETOOTH) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(arrayOf<String>(Manifest.permission.BLUETOOTH), 1001)
        }

        if (checkSelfPermission(Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(arrayOf<String>(Manifest.permission.BLUETOOTH_CONNECT), 1001)
        }

        if (checkSelfPermission(Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(arrayOf<String>(Manifest.permission.BLUETOOTH_SCAN), 1001)
        }

        if (checkSelfPermission(Manifest.permission.BLUETOOTH_ADMIN) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(arrayOf<String>(Manifest.permission.BLUETOOTH_ADMIN), 1001)
        }

但对话框窗口仍未显示

推荐答案

根据documentation,您需要基于目标Android API版本的特定权限。

如果您的应用面向Android 11(API级别30)或更低版本,请在应用的清单文件中声明以下权限:

  • 蓝牙是执行任何蓝牙传统通信或BLE通信所必需的,例如请求连接、接受连接和传输数据。

  • Access_Fine_Location是必需的,因为在Android 11和更低版本上,蓝牙扫描可能用于收集有关用户位置的信息。

如果您的应用针对Android 9(API级别28)或更低版本,您可以声明ACCESS_COARSE_LOCATION权限,而不是ACCESS_FINE_LOCATION权限。

为了执行扫描以发现BLE设备,应用程序必须明确要求用户也在AndroidManifest.xml中声明ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION权限。

在我的项目(WearOS API版本28)中,我在MainActivity类的onCreate函数中使用了此代码

if (ContextCompat.checkSelfPermission(
            this, Manifest.permission.ACCESS_FINE_LOCATION) !=
            PackageManager.PERMISSION_GRANTED 
    ) {
        ActivityCompat.requestPermissions(this,new String[] { Manifest.permission.ACCESS_FINE_LOCATION },
                1);
    }

和我重写了onRequestPermissionsResult函数

 public void onRequestPermissionsResult(int requestCode, String[] permissions,
                                       int[] grantResults) {
    switch (requestCode) {
        case 1:
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0 &&
                    grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                
                Logger.d("MainActivity","Permission approved");
            }  else {
                Logger.d("MainActivity","Error getting permission");
            }
            return;
    }

}

这对我很有用,希望能对您有所帮助

这篇关于无法在Wear OS Samsung Galaxy Watch 4上请求蓝牙权限的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆