android

动态申请权限

2020-04-14  本文已影响0人  静享时光

Android中的权限分为系统权限和应用自定义权限,系统权限又分为正常权限和危险权限。
正常权限只需要在AndroidManifest.xml文件中申请即可。
对于危险性权限,在android6.0之前,我们只需要在AndroidManifest.xml文件中申请即可,但是在android6.0之后,不仅要在AndroidManifest.xml文件中申请,还需要在代码中进行动态申请。
在AndroidManifest.xml文件中申请:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

动态申请:

   private static final int REQUEST_PERMISSION_CODE = 1;
    //需要申请的权限
    private static String[] PERMISSIONS_ALL = {
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE",
            "android.permission.RECORD_AUDIO"
    };


    /**
     * 动态申请权限
     * <p>
     * 这里没有进行一些判空处理,在实际开发中可以做一些判空处理
     */
    private void requestPermissions() {
        //判断是否是6.0及以上版本
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            return;
        }
        StringBuilder builder = new StringBuilder();
        for (String permission : PERMISSIONS_ALL) {
            //判断所需权限是否已经已经动态申请
            if (ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                builder.append(permission).append(",");
            }
        }

        String permissionNeedStr = builder.toString();
        String[] permissionNeedArray = permissionNeedStr.split(",");
        Log.e(TAG, "需要申请的数量: " + permissionNeedArray.length);
        for (String data : permissionNeedArray) {
            Log.e(TAG, "待申请权限: " + data);
        }
        //申请那些没有的权限,在activity中申请权限,权限授权结果会回调在acitvity中,我们可以在授权回调中做一些处理
        ActivityCompat.requestPermissions(this, permissionNeedArray, REQUEST_PERMISSION_CODE);
    }

    /**
     * activity权限授权结果回调
     *
     * @param requestCode
     * @param permissions
     * @param grantResults
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

在Activity中动态申请之后,还可以更加需求在回调中进行处理。

上一篇 下一篇

猜你喜欢

热点阅读