无法在Wear OS Samsung Galaxy Watch 4上请求蓝牙权限

Cannot request Bluetooth permission on Wear OS Samsung Galaxy Watch 4(无法在Wear OS Samsung Galaxy Watch 4上请求蓝牙权限)
本文介绍了无法在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上请求蓝牙权限的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

How to target newer versions in .gitlab-ci.yml using auto devops (java 11 instead of 8 and Android 31 instead of 29)(如何在.gitlab-ci.yml中使用自动开发工具(Java 11而不是8,Android 31而不是29)瞄准较新的版本)
Android + coreLibraryDesugaring: which Java 11 APIs can I expect to work?(Android+core LibraryDesugering:我可以期待哪些Java 11API能够工作?)
How to render something in an if statement React Native(如何在If语句中呈现某些内容Reaction Native)
How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)
Using Firebase Firestore in offline only mode(在仅脱机模式下使用Firebase FiRestore)
Crash on Google Play Pre-Launch Report: java.lang.NoSuchMethodError(Google Play发布前崩溃报告:java.lang.NoSuchMethodError)