首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >三星Galaxy Watch 4上无法请求蓝牙许可

三星Galaxy Watch 4上无法请求蓝牙许可
EN

Stack Overflow用户
提问于 2021-12-27 12:57:01
回答 2查看 1.2K关注 0票数 2

我已经创建了一个示例磨损操作系统应用程序,它可以发现BLE设备,但是我的代码需要蓝牙权限。当我把这些行列在清单上时:

代码语言:javascript
复制
    <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设备连接到我的手表上?

upd:我试过:

代码语言:javascript
复制
        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)
        }

但是仍然没有显示对话框窗口。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-12 21:05:41

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

如果应用程序的目标是Android 11 (API级别30)或更低,请在应用程序的清单文件中声明以下权限:

  • 蓝牙是执行任何蓝牙经典或BLE通信所必需的,例如请求连接、接受连接和传输数据。
  • ACCESS_FINE_LOCATION是必要的,因为在Android11和更低版本上,蓝牙扫描可能被用来收集关于用户位置的信息。

如果应用程序的目标是Android9 (API 28)或更低,您可以声明ACCESS_COARSE_LOCATION权限而不是ACCESS_FINE_LOCATION权限。

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

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

代码语言:javascript
复制
if (ContextCompat.checkSelfPermission(
            this, Manifest.permission.ACCESS_FINE_LOCATION) !=
            PackageManager.PERMISSION_GRANTED 
    ) {
        ActivityCompat.requestPermissions(this,new String[] { Manifest.permission.ACCESS_FINE_LOCATION },
                1);
    }

我重写了onRequestPermissionsResult函数

代码语言:javascript
复制
 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;
    }

}

这对我有用,我希望能帮到你

票数 2
EN

Stack Overflow用户

发布于 2021-12-27 13:18:23

有一些权限,如相机,蓝牙,需要先询问,然后手动提供。在应用程序中首先加载的活动中使用此方法。

代码语言:javascript
复制
if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(arrayOf<String>(Manifest.permission.CAMERA), 1001);
        }             //ask camera permissions

确保进行所需的更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70495791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档