Gallery无法在Android 7.0上打开内容uri图像文件

时间:2017-03-03 17:51:40

标签: android

在我的应用中,我会显示帖子可能包含图片的帖子列表。当用户点击帖子图片时,创建选择器会显示“照片”,“图库”等可用选项。我的问题是,为什么不能在Android 7.0或API 24及更高版本上打开图像?我收到错误“无法打开文件。”在API级别23及以下,我提供了似乎正常工作的实际文件路径。在发布这个问题之前,我确认了以下事项。感兴趣的部分是" Photo"可以打开它。

  1. 我使用FileProvider获取正确的内容uri。我的uri看起来像这样:

    内容://package.fileprovider/attachment/filename

  2. 我使用的是适当的mime类型。

  3. 我正在使用正确的意图和权限标记。请参阅以下代码:

  4. Intent myIntent = new Intent(Intent.ACTION_VIEW); myIntent.putExtra(ShareCompat.EXTRA_CALLING_PACKAGE,getActivity()。getPackageName()); myIntent.putExtra(ShareCompat.EXTRA_CALLING_ACTIVITY,getActivity()。getComponentName());

    myIntent.setDataAndType(uri,mimeType); myIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); startActivity(Intent.createChooser(myIntent," Open file:"));

3 个答案:

答案 0 :(得分:1)

仅适用于上面的Android API 24 - Nougat设备

 File file = new File(String.valueOf(path), imageName+".png"); //it is image file name.
 if(Build.VERSION.SDK_INT>=24){ 
      Intent intent = new Intent();

      intent.setAction(Intent.ACTION_VIEW);

      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //must provide

      Uri photoUri = FileProvider.getUriForFile(YourCurrentActivity.this, 
                      android.support.v4.BuildConfig.APPLICATION_ID + 
                      ".fileprovider", finalFile);

      intent.setData(photoUri);

      YourCurrentActivity.this.startActivity(intent);
 }

答案 1 :(得分:0)

您可以通过将文件URI添加到您的应用程序来打开文件URI:

if(Build.VERSION.SDK_INT>=24){
    try{
        Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure");
        m.invoke(null);
    }catch(Exception e){
        e.printStackTrace();
    }
}

内容可能是新事物,但在我看来,与较低的API设备相比,没有足够的7.0设备处于活动状态,以证明不使用此弃用方法的合理性。 7.0设备仍然可以使用它,安静。

答案 2 :(得分:0)

也许在Nougat上你需要获得用户的许可才能读写。您的代码将在N以下工作。因此,要求用户授予读取权限,并检查FileProvider,您也需要它。