【问题标题】:Can't load images from external storage in M preview无法在 M 预览中从外部存储加载图像
【发布时间】:2015-06-01 07:42:18
【问题描述】:

我有一个将其图像存储在外部存储上的应用程序。在我尝试新的 M 预览版之前,它一直运行良好。

我使用 picasso(我什至尝试过 Ion)来加载图像,并使用“file:///mnt/sdcard/appname/image1.jpg” URI 获取图像。

我根本没有收到任何错误,但我猜 M 已经更改了从外部存储读取的权限。我试过用谷歌搜索,但结果是空的。

顺便说一下,将图像写入外部存储的工作正常。

【问题讨论】:

    标签: android picasso android-ion android-6.0-marshmallow


    【解决方案1】:

    虽然 Siris_cac 的答案得到了很好的解释,但这并不是导致我的问题的原因。 原来我不能使用“file:///mnt/sdcard/appname/image1.jpg”从M的外部存储中加载文件。

    我猜这可能与http://www.androidpolice.com/2015/05/28/android-m-feature-spotlight-external-storage-can-be-adopted-as-true-internal-storage-or-accessed-normally-with-no-additional-apps/有关

    我想我一开始就错了,在加载图像时不使用 Enviroment.getExternalStorageDirectory(),只在保存它们时使用。

    所以现在加载我使用的图像:

    "file:///" + Environment.getExternalStorageDirectory().getPath() + "/appname/image1.jpg";
    

    【讨论】:

      【解决方案2】:

      您可以尝试检查权限是否由以下人员授予:

      checkCallingOrSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
      

      并尝试使用requestPermissions() 像这样在运行时请求权限。

      int EXT_PERMISSION = 1;
      requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
      

      而且, 处理 Permission Granted 结果

      @Override
      public void onRequestPermissionsResult(int requestCode,
              String permissions[], int[] grantResults) {
          switch (requestCode) {
              case EXT_PERMISSION: {
                  if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //permission granted
                  } else {
                    //permission denied
                  }
                  break;
              }
          }
      }
      

      【讨论】:

      • 我没有改变任何东西。据我了解,新权限仅适用于您针对 M 构建?
      • 是的。仅当您以 M 为目标时。我想您现在使用的相同代码适用于以前的版本。
      • 是的,它在旧版本的 android 上运行良好。但是你的意思是几乎所有的应用程序都会在 M 上崩溃或出现意外行为,除非他们获得更新以使用 M SDK 构建?因为我什至无法在旧 SDK 中使用 requestPermissions 方法?
      • 我在 WhatsApp 上遇到了类似的问题。该应用程序只会打开一个 Camera 实例,而不是 ImagePicker 或 Gallery 实例。在调用requestPermissions()之前,如果Build版本大于M,你可以很好地添加一个检查条件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      相关资源
      最近更新 更多