J'essaie d'utiliser FileProvider
pour lire une vidéo à partir d'un chemin privé.
Java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/XXXXX(Package)/files/Videos/final.mp4
Code:
<paths>
<files-path path="my_docs" name="Videos/" />
</paths>
Code 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" />
Des indices à ce sujet?
Merci Nitz
Vous avez votre name
et votre path
retournés. name
est ce qui se passe dans Uri
, et path
est l'emplacement relatif dans la racine du système de fichiers.
Aller avec:
<paths>
<files-path name="my_docs" path="Videos/" />
</paths>
J'ai eu la même situation de base. J'ai tout défini correctement (files-path en xml) mais il y a encore une chose qui conduit à la même exception. J'ajoute une autre réponse juste comme un ajout et un commentaire ne serait pas bien lisible.
J'ai créé/lu le répertoire où je stocke les fichiers comme:
context.getDir("Documents", Context.MODE_PRIVATE)
Cela conduit à un chemin comme:
/data/user/0/ch.myapp/app_Documents/6c3c70d5-af66-48ef-8dfc-f4341de4e1bd.docx
Puis j'ai changé la création du répertoire en:
File directory = new File(context.getFilesDir(), "Documents");
if (!directory.exists()) {
directory.mkdir();
}
Cela conduit à un chemin comme:
/data/user/0/ch.myapp/files/Documents/6c3c70d5-af66-48ef-8dfc-f4341de4e1bd.docx
Selon la documentation Ouvrir un répertoire , les deux méthodes doivent être équivalentes pour autant que je sache. Mais cela crée un chemin différent ... Peut-être que la formulation n'est pas claire pour moi dans la documentation, mais pour moi, c'est mal écrit.
getDir (nom, mode)
Crée un nouveau répertoire (ou ouvre un répertoire existant) dans le répertoire unique du système de fichiers de votre application. Ce nouveau répertoire apparaît dans le répertoire fourni par getFilesDir ().