Android 动态申请权限

Posted OneDay-X

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 动态申请权限相关的知识,希望对你有一定的参考价值。

无法读取文件

android开发中,API23或以上版本读写文件时可能会出现如下错误:

open failed: EACCES (Permission denied)

或者无法正常读取文件即使你已经在注册文件AndroidManifest.xml中添加了相应的读写权限。

原因在于API23或以上版本需要进行动态权限申请,具体申请过程如下:


动态申请权限

在需要申请权限的Activity中添加一个权限申请函数:

private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = 
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    ;
    public static void verifyStoragePermissions(Activity activity) 
        // Check if we have write permission
        int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

        if (permission != PackageManager.PERMISSION_GRANTED) 
            // We don't have permission so prompt the user
            ActivityCompat.requestPermissions(
                    activity,
                    PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE
            );
        
    

同时,此时仍然需要在注册文件AndroidManifest.xml文件中进行权限静态申请:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
注意,将其放在<application>标签之外。

最后,就可以在该Activity中通过调用函数verifyStoragePermissions(this)进行权限动态申请,从而达到可以读取文件的目的。

以上是关于Android 动态申请权限的主要内容,如果未能解决你的问题,请参考以下文章

Android6.0动态权限申请步骤以及需要注意的一些坑

关于Android 6.0 动态申请权限的小知识记录

Android动态权限申请

android6.0动态权限申请

android6.0动态权限申请

Android M 动态权限获取