我收到以下错误:
05-29 01:08:02.924: E/AndroidRuntime(5447): FATAL EXCEPTION: IntentService[com.sample.muzeitest.MuzeiClass]
05-29 01:08:02.924: E/AndroidRuntime(5447): java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/com.sample.muzeitest/files/wallpaper0.png
05-29 01:08:02.924: E/AndroidRuntime(5447): at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:678)
05-29 01:08:02.924: E/AndroidRuntime(5447): at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:377)
05-29 01:08:02.924: E/AndroidRuntime(5447): at com.sample.muzeitest.MuzeiClass.muzeiContentUri(MuzeiClass.java:58)
05-29 01:08:02.924: E/AndroidRuntime(5447): at com.sample.muzeitest.MuzeiClass.onUpdate(MuzeiClass.java:37)
05-29 01:08:02.924: E/AndroidRuntime(5447): at com.google.android.apps.muzei.api.MuzeiArtSource.processAndDispatchSubscriberAdded(MuzeiArtSource.java:614)
05-29 01:08:02.924: E/AndroidRuntime(5447): at com.google.android.apps.muzei.api.MuzeiArtSource.processSubscribe(MuzeiArtSource.java:581)
05-29 01:08:02.924: E/AndroidRuntime(5447): at com.google.android.apps.muzei.api.MuzeiArtSource.onHandleIntent(MuzeiArtSource.java:539)
05-29 01:08:02.924: E/AndroidRuntime(5447): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
05-29 01:08:02.924: E/AndroidRuntime(5447): at android.os.Handler.dispatchMessage(Handler.java:99)
05-29 01:08:02.924: E/AndroidRuntime(5447): at android.os.Looper.loop(Looper.java:137)
05-29 01:08:02.924: E/AndroidRuntime(5447): at android.os.HandlerThread.run(HandlerThread.java:61)
当我尝试将我的FileProvider
与muzei app一起使用时。
我有一个活动(将可绘制文件夹中的一些位图添加到/data/data/APP-SPACE-HERE/files/
)和一个扩展MuzeiArtSource
的类:
public class MuzeiClass extends MuzeiArtSource {
Uri imgUri;
public MuzeiClass() {
super(MuzeiClass.class.getName());
}
@Override
public void onCreate() {
super.onCreate();
// setUserCommands(BUILTIN_COMMAND_ID_NEXT_ARTWORK); // manual switch image
}
@Override
protected void onUpdate(int arg0) {
imgUri = muzeiContentUri();
publishArtwork(new Artwork.Builder()
.imageUri( imgUri )
.title("Example image")
.byline("Unknown person, c. 1980")
// .viewIntent(new Intent(Intent.ACTION_VIEW,
// Uri.parse("http://example")))
.build());
}
public Uri muzeiContentUri() {
File newFile = new File(getFilesDir(), "wallpaper0.png");
Uri contentUri = FileProvider.getUriForFile(getApplicationContext(), "com.sample.muzeitest.fileprovider", newFile);
return contentUri;
}
}
清单文件包含provider
和FileProvider
代码的service
:
<service
android:name="com.sample.muzeitest.MuzeiClass"
android:label="@string/title_activity_muzei_service"
android:description="@string/muzei_description"
android:icon="@drawable/ic_source">
<intent-filter>
<action android:name="com.google.android.apps.muzei.api.MuzeiArtSource" />
</intent-filter>
<meta-data android:name="color" android:value="#fa0" />
</service>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.sample.muzeitest.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/muzei_wallpapers" />
</provider>
我在res/
文件夹中也有这个xml文件:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="my_images" path="files/" />
</paths>
我昨天提出this问题,但问题是关于uri的名字。
我使用adb shell
转到指定的路径/data/data/com.sample.muzeitest/files/wallpaper0.png
,我可以确认文件已保存。在SO上也阅读一些类似的问题,但没有一个帮助。
答案 0 :(得分:5)
/data/data/com.sample.muzeitest/files/wallpaper0.png
表示文件路径,没有子目录。
然后 xml定义是
<files-path name="my_images" path="" />
files-path#path
为files/xxxxx/
&lt; ==表示xxxxx /
请检查。