【问题标题】:File.listFiles returns null when it shouldn'tFile.listFiles 在不应该返回 null 时返回
【发布时间】:2017-02-09 10:10:32
【问题描述】:

我正在尝试使用以下方法获取 Phone Pictures 文件夹中存在的文件列表(内部存储,未插入 SDCard):

 File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
 File[] files = file.listFiles();

但文件值始终为空。 我还将它添加到 AndroidManifest.xml

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

任何想法都将不胜感激,在此先感谢。

【问题讨论】:

  • File file = new File(String.valueOf(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES ).getAbsoluteFile()));。那是可怕的代码。改为File file = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES);
  • 使用您的代码的 file.getAbsolutePath() 的值是多少?
  • 目录是否包含文件?
  • /storage/emulated/0/Pictures,这是访问内存图片文件夹的路径吗?
  • 正在使用哪个 Android 版本?

标签: android filesystems android-permissions


【解决方案1】:

如果您的目标是 Android SDK >=23,您需要在运行时获得许可。

https://developer.android.com/training/permissions/requesting.html

【讨论】:

  • 我需要什么权限? WRITE_EXTERNAL_STORAGE?已经从代码中尝试过,没有任何改变
  • WRITE_EXTERNAL_STORAGE 在 AndroidManifest.xml 中获得此权限并在运行时获取权限
【解决方案2】:

它返回 null 因为Environment.getExternalStoragePublicDirectory 将/应该处理来自外部存储(如 SD 卡)的文件..因为你说没有插入 SD 卡

【讨论】:

  • 确实来自外部存储。但从不使用 SD 卡。
  • 您到底有什么要求..??假设您没有提到 SD 卡,我假设您想列出内部存储中的图片
  • 函数名说明了一切:来自外部存储。
【解决方案3】:

正如 Abhishek Aryan 建议的那样,我使用的是 Android SDK >=23,所以我必须使用代码获取权限:

  boolean grantedAll = ContextCompat.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
if (!grantedAll)
   {
     ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
            REQUEST_PERMISSIONS);
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-08
    • 2017-01-03
    • 2016-09-27
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    相关资源
    最近更新 更多