经我测试,这在<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;
    }

Logo

华为AI开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐