2015-07-10 6 views
32

Я пытаюсь использовать FileProvider для воспроизведения видео из частных path.FacingAndroid: FileProvider IllegalArgumentException Не удалось найти сконфигурированный корень, который содержит /data/data/**/files/Videos/final.mp4

java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/XXXXX(Package)/files/Videos/final.mp4 

код:

<paths> 
    <files-path path="my_docs" name="Videos/" /> 
</paths> 

Java код:

File imagePath = new File(getFilesDir(), "Videos"); 
File newFile = new File(imagePath, "final.mp4"); 
Log.d(TAG, "-------------newFile:"+newFile.exists());//True here 
//Exception in below line 
Uri contentUri = FileProvider.getUriForFile(this,"com.wow.fileprovider", newFile); 

Manifest.xml

<provider 
    android:name="android.support.v4.content.FileProvider" 
    android:authorities="com.wow.fileprovider" 
    android:exported="false" 
    android:grantUriPermissions="true"> 

<meta-data 
    android:name="android.support.FILE_PROVIDER_PATHS" 
    android:resource="@xml/file_paths" /> 

Любые подсказки по этому поводу?

Благодаря Nitz

+0

я получаю «Атрибут отсутствует префикс пространства имен для Android» в @ XML/file_paths при реализации Fileprovider..later как-то я в конечном итоге кладя имя и путь и в конечном итоге с этим выпуск .. – NitZRobotKoder

ответ

47

У вас есть ваши name и ваш path переворачивается. name - это то, что входит в Uri, а path - это относительное местоположение в корневом каталоге файловой системы.

Go с:

<paths> 
    <files-path name="my_docs" path="Videos/" /> 
</paths> 
+0

Gosh !! Интересно, как я его упустил. Вы сохранили мой день, спасибо .. :-) – NitZRobotKoder

+0

Застрял с "java.lang.SecurityException: Разрешение отказа: открытие провайдера android.support.v4.content.FileProvider из ProcessRecord {44c35948 3239: com.mxtech.videoplayer.ad/u0a307} (pid = 3239, uid = 10307), который не экспортируется из uid 10221 «Попытка перейти к видеоплееру с помощью намерения. – NitZRobotKoder

+2

@NitZRobotKoder: Если вы используете «видеопроигрыватель», вы имеете в виду отдельное приложение, а затем добавляете 'FLAG_GRANT_READ_URI_PERMISSION' к вашему' Intent', который вы используете с 'startActivity()' для запуска проигрывателя. Если «видеопроигрыватель» означает «MediaPlayer», я бы выбрал путь 'FileDescriptor', а не' ContentProvider'. Если «видеопроигрыватель» означает «VideoView», у меня нет предложений. – CommonsWare