Android READ_EXTERNAL_STORAGE权限是否正常工作?

时间:2017-05-04 08:36:59

标签: android android-studio

我正在创建一个加载OBJ和MTL文件的应用程序,然后在屏幕上显示它以供用户旋转。我正在运行Android 6.0.1的手机上进行测试。 OBJ和MTL文件位于手机上名为“models”的目录中。要在应用中选择文件,我需要打开一个菜单,然后点击“打开”。但是没有READ_EXTERNAL_STORAGE权限,应用程序就会崩溃。我在AndroidManifest.xml中添加了权限并再次测试了应用程序。这一次,我可以点击“打开”并查看所有文件应该在的列表视图,除了我看不到任何文件。点击“打开”时,该应用也不会崩溃。 logcat没有显示任何错误。

在寻找我的问题的答案时,我遇到了这个:

if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (shouldShowRequestPermissionRationale(
            Manifest.permission.READ_EXTERNAL_STORAGE)) {
        // Explain to the user why we need to read the contacts
    }

    requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
            MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);

    // MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an
    // app-defined int constant that should be quite unique

    return;
}

Sniplet来源:https://developer.android.com/training/permissions/requesting.html#perm-check

是否需要批准其实际读取外部存储并在应用中显示文件的权限?这是我需要添加到我的代码中的东西吗? 即使在寻找答案之后,我似乎无法解决这个简单的“错误”。

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="[REDACTED]"
    android:versionCode="1"
    android:versionName="16150.8">

    <uses-sdk android:minSdkVersion="7"
              android:targetSdkVersion="23"/>

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
                     android:maxSdkVersion="23" />


    <application
        [REDACTED]
    </application>

</manifest>

2 个答案:

答案 0 :(得分:0)

1)清除Settings-> App- > [you app name]

中的数据

2)从权限行中删除android:maxSdkVersion

3)按代码检查请求权限

if (Build.VERSION.SDK_INT >= Build.Build.VERSION_CODES.M) { 
     checkPermissions(Utils.PERMISSION_WRITE_EXTERNAL_STORAGE);
}else{/*open regulary*/}

答案 1 :(得分:0)

对于大于23的api,您需要添加运行时权限。

1)检查最小sdk版本是否应大于15。

2)最大sdk版本应大于23或23。

3)每次访问外部存储或其他任何内容时,都需要调用运行时权限。

4)请参阅此站点以获取运行时权限 http://www.truiton.com/2016/04/obtaining-runtime-permissions-android-marshmallow-6-0/

https://www.sitepoint.com/requesting-runtime-permissions-in-android-m-and-n/

http://www.journaldev.com/10409/android-handling-runtime-permissions-example