开发蓝牙功能,Java调用位置信息权限弹窗、附近设备权限
·
经我测试,这在<M版本的情况下很好弄,只需要点击时再次往里灌权限,就可以弹出窗口。但是在大于>S版本的时候,只有在app第一点击时,才会有权限请求窗口。如果第一次弹出窗口时,手贱点了禁用,那么,再次点击时,无论咋灌权限代码,都无济于事——那个选择“禁用or允许”的窗口再也不会出现!——测试机华为P50 pro,鸿蒙3.0,匹配的andriod 12——或许,是我的代码不对。但是同样的代码,在我其他的低版本测试机上,会反复弹权限请求窗口(点禁用反复弹,点允许不再弹)。搜遍CSDN,有大神写代码,弹出系统设置定位权限页面,让用户在里面先找到对应app,再打开定位。我于是如法炮制,在请求附近设备权限时,也打开系统设置“附近设备”权限界面
Intent intent2 = new Intent(Settings.ACTION_APPLICATION_SETTINGS);
startActivity(intent2);
——不过感觉太2了,这需要先找到对应app,再找到“附近设备”,接着打开权限,然后一步一步点返回,不如弹窗模式来的快。
2023.11.29更新如下:直接干上这段代码,每次都能动态申请权限
private final int ACCESS_LOCATION = 1;
private void getPermission() {
int permissionCheck;
permissionCheck = this.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION);
permissionCheck += this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
//未获得权限
this.requestPermissions( // 请求授权
new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION},
ACCESS_LOCATION);// 自定义常量,任意整型
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == ACCESS_LOCATION) {
String TAG = "DeviceBlue";
if (hasAllPermissionGranted(grantResults)) {
Log.i(TAG, "onRequestPermissionsResult: 用户允许权限");
} else {
Log.i(TAG, "onRequestPermissionsResult: 拒绝搜索设备权限");
}
}
}
private boolean hasAllPermissionGranted(int[] grantResults) {
for (int grantResult : grantResults) {
if (grantResult == PackageManager.PERMISSION_DENIED) {
return false;
}
}
return true;
}
更多推荐



所有评论(0)