使用FileProvider

时间:2017-05-09 02:03:33

标签: android xamarin xamarin.android android-fileprovider

我在尝试使用FileProvider时遇到此异常:

Java.Lang.IllegalArgumentException: Unable to find configured root for content://com.abc/Android/data/com.abc/files/345345345.pdf   Java.Lang.IllegalArgumentException

我想我的file_paths.xml使用错误的路径配置FileProvider。我的代码:

file_paths.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path path="." name="." />
    <files-path path="com.abc/Android/data/com.abc/files/" name="files" />
</paths>

的AndroidManifest.xml

<application android:label="@string/AppName" android:icon="@drawable/ic_launcher">
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
    <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.abc" android:exported="false" android:grantUriPermissions="true">
        <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" />
    </provider>
</application>

我应该在pathname file_paths.xml中放置哪些值,以使用内容URI公开文件:content://com.abc/Android/data/com.abc/files/345345345.pdf

我创建URI的代码:

File newFile = new File (Application.Context.FilesDir.AbsolutePath, filename);
                Android.Net.Uri androidContentUri = FileProvider.GetUriForFile (Application.Context, Application.Context.PackageName, newFile);
                System.Uri systemContentUri = SystemUri (androidContentUri);
                return systemContentUri;

1 个答案:

答案 0 :(得分:0)

您的参赛作品:

<files-path path="com.abc/Android/data/com.abc/files/" name="files" />

应该成为:

<files-path path="files" name="files" />
在这种情况下,

路径表示应用内部存储区域的files/子目录中的文件。

此应用程序私有子目录与返回的值相同:

Application.Context.FilesDir;

因此,您应用中的文件位置为:

var path = Path.Combine(Application.Context.FilesDir.AbsolutePath, "files");