无法找到包含的已配置根

时间:2014-05-28 22:27:55

标签: android android-fileprovider

我收到以下错误:

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;
}



}

清单文件包含providerFileProvider代码的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上也阅读一些类似的问题,但没有一个帮助。

1 个答案:

答案 0 :(得分:5)

/data/data/com.sample.muzeitest/files/wallpaper0.png 

表示文件路径,没有子目录。

然后  xml定义是

<files-path name="my_images" path=""  />

files-path#pathfiles/xxxxx/&lt; ==表示xxxxx /

请检查。