0

我想访问外部存储中公共文件夹中的图片文件。这是我的代码:

    if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
          java.io.File pictureDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
          ///storage/sdcard0/Pictures
          boolean canRead = pictureDir.canRead();
          //Above gives false
          java.io.File[] picFiles = pictureDir.listFiles();
          //null is returned for the file though I've atleast three picture files at this location
      }

它为我提供了指向公用文件夹的正确指针,但 canRead() 方法返回 false。当我尝试在图片目录下列出文件时,它给了我空值。

如果您需要更多详细信息,请告诉我。

[更新]

AndroidManifest.xml 中的权限

<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />

[更新 2] 这看起来像是一个特定于设备的问题,因为它在模拟器上运行良好。

4

2 回答 2

1

我只是插话“设备特定”问题的另一点。我有一个中兴代客,我试图访问外部目录以进行读取,但遇到相同的问题,以下权限导致 getExternalFilesDir( ) 返回空值:

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

上面提到的技巧(使用 WRITE_EXTERNAL_STORAGE 权限)确实导致文件被 getExternalFilesDir() 返回...奇怪..太奇怪了...

于 2015-12-29T21:22:29.640 回答
0

您在 AndroidManifest.xml 中声明了错误的权限。您实际上正在使用外部存储。从 API 16 开始,如果您使用外部存储,则需要新的权限:

http://developer.android.com/reference/android/Manifest.permission.html#READ_EXTERNAL_STORAGE

您可以通过在运行 Android 4.1 或更高版本时在 Android Emulator 上运行您的应用程序或在运行 Android 4.1 或更高版本的设备上的设置应用程序中的开发人员选项下启用保护 USB 存储来使用强制执行的权限测试您的应用程序。

可能在您的设备中设置了保护 USB 存储,在这种情况下您需要使用READ_EXTERNAL_STORAGE权限。顺便WRITE_EXTERNAL_STORAGE会盖READ_EXTERNAL_STORAGE

于 2013-04-21T18:55:31.603 回答