android

Android动态获取权限,Android 10 读取本地文件权

2020-11-17  本文已影响0人  咸鱼而已

动态获取权限参考文章

1. 授权权限

2.拒绝权限

3. 申请权限

在BaseActivity里写授权申请,首先检查申请的权限是不是被授权了,如果不是就加入待授权数组里,去申请权限。如果全部已授权,就直接回掉授权成功。

public static void checkAndRequestPermission() {
    if (Build.VERSION.SDK_INT >= 23) {
        List<String> lackedPermission = new ArrayList<String>();
        if (!(mActivity.checkSelfPermission(Manifest.permission.READ_PHONE_STATE)== PackageManager.PERMISSION_GRANTED)) {
            lackedPermission.add(Manifest.permission.READ_PHONE_STATE);
        }
        if (!(mActivity.checkSelfPermission(Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS) == PackageManager.PERMISSION_GRANTED)) {
            lackedPermission.add(Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS);
        }
        // 权限都已经有了,那么直接调用SDK
        if (lackedPermission.size() == 0) {
        } else {
            // 请求所缺少的权限,在onRequestPermissionsResult中再看是否获得权限,如果获得权限就可以调用SDK,否则不要调用SDK。
            String[] requestPermissions = new String[lackedPermission.size()];
            lackedPermission.toArray(requestPermissions);
            mActivity.requestPermissions(requestPermissions, 101);
        }
    }
}

然后重写授权返回方法。系统会返回2个数组, String[] permissions是你申请的权限,int[] grantResults是授权结果。拿出授权结果比对,如果授权,加入授权数组,如果拒绝,加入拒绝数组。回掉给注册PermissionListener的activity

/** 申请结果
 * @param requestCode
 * @param permissions
 * @param grantResults
 */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode){
        case 1:
            if (grantResults.length>0){
                List<String> deniedPermissions = new ArrayList<>();
                List<String> grantedPermissions = new ArrayList<>();
                for (int i = 0; i < grantResults.length; i++) {
                    int grantResult = grantResults[i];
                    if (grantResult != PackageManager.PERMISSION_GRANTED){
                        String permission = permissions[i];
                        deniedPermissions.add(permission);
                    }else{
                        String permission = permissions[i];
                        grantedPermissions.add(permission);
                    }
                }

                if (deniedPermissions.isEmpty()){
                    mPermissionListener.onGranted();
                }else{
                    mPermissionListener.onDenied(deniedPermissions);
                    mPermissionListener.onGranted(grantedPermissions);
                }
            }
            break;
    }
}

4. Android 10 无法读取本地文件 FileNotFoundException: Permission denied 解决办法

解决办法:

<application
    android:label="@string/app_name"
    android:allowBackup="true"
    android:usesCleartextTraffic="true"
    android:networkSecurityConfig="@xml/network_security_config"
    android:requestLegacyExternalStorage="true"
    android:icon="@mipmap/ic_launcher">
    ...
</application>
上一篇 下一篇

猜你喜欢

热点阅读