1

我创建了一个示例 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)
        }

但对话框窗口仍然不显示

4

2 回答 2

1

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

if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(arrayOf<String>(Manifest.permission.CAMERA), 1001);
        }             //ask camera permissions

确保进行必要的更改。

于 2021-12-27T13:18:23.777 回答
1

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

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

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

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

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

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

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

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

}

这对我有用,我希望对你有帮助

于 2022-01-12T21:05:41.100 回答