文件提供者 - 即使在自己的应用程序中也无法访问文件

时间:2014-07-12 12:47:19

标签: android pdf imageview android-contentprovider android-fileprovider

我正在实施File Provider,请仔细按照文档进行操作,但无法使用应用程序本身中的文件或共享任何文件。

添加了清单,为dir共享创建了xml文件,生成内容uri,授予uri权限,尝试与缓存,外部,内部目录共享文件,但没有任何工作。

搜索网络,但发现代码中没有遗漏任何内容。

以下是代码:

清单:

 <provider
     android:name="android.support.v4.content.FileProvider"
     android:authorities="package.widget.fileprovider"
     android:exported="false"
     android:grantUriPermissions="true" >
     <meta-data
         android:name="android.support.FILE_PROVIDER_PATHS"
         android:resource="@xml/filepaths" />
  </provider>

filepaths.xml

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <cache-path name="widgetDoc" path="."/>
</paths>

GetUri:

private Uri getFileUri(Context context, String name){
        File newFile = new File(context.getCacheDir() + File.separator + StorageUtil.INTERNAL_DIR, name);
        Uri contentUri = FileProvider.getUriForFile(context, "package.widget.fileprovider", newFile);       

        return contentUri;
    }

访问pdf文件的代码:

Intent target = new Intent(Intent.ACTION_VIEW);
Uri uri = getFileUri(getApplicationContext(), file);
target.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
target.setDataAndType(uri,"application/pdf");
Intent intent = Intent.createChooser(target, "Choose Pdf Viewer...");
startActivity(intent);

访问图片的代码:

imageview.setImageURI(getFileUri(getApplicationContext(), file));

请帮助我解决我出错的地方,甚至不能在我自己的应用程序中使用这些文件。

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

我需要在窗口小部件中显示这些图像文件,现在如果从窗口小部件访问图像文件,那么它会给出IllegalArgumentException:无法找到已配置的root但是它可以正常运行

理想情况下,使用setImageViewBitmap(),并确保您的图片很小(堆空间小于1MB,例如小于512x512)。

虽然RemoteViews可以接受Uri,但您可以很好地将Intent.FLAG_GRANT_READ_URI_PERMISSIONRemoteViews相关联,以便填充ImageView。而且,您无法导出FileProvider,因为FileProvider不允许这样做。

您可以尝试识别用户选择的主屏幕,并use grantUriPermission()授予主屏幕访问此Uri的权限,但我希望该解决方案易碎。