我已经创建了一个示例磨损操作系统应用程序,它可以发现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设备连接到我的手表上?
upd:我试过:
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)
}但是仍然没有显示对话框窗口。
发布于 2022-01-12 21:05:41
根据文档,您需要基于目标Android版本的特定权限。
如果应用程序的目标是Android 11 (API级别30)或更低,请在应用程序的清单文件中声明以下权限:
如果应用程序的目标是Android9 (API 28)或更低,您可以声明ACCESS_COARSE_LOCATION权限而不是ACCESS_FINE_LOCATION权限。
为了执行扫描以发现BLE设备,应用程序必须向用户明确要求ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限也要在AndroidManifest.xml中声明。
在我的项目(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;
}
}这对我有用,我希望能帮到你
发布于 2021-12-27 13:18:23
有一些权限,如相机,蓝牙,需要先询问,然后手动提供。在应用程序中首先加载的活动中使用此方法。
if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(arrayOf<String>(Manifest.permission.CAMERA), 1001);
} //ask camera permissions确保进行所需的更改。
https://stackoverflow.com/questions/70495791
复制相似问题