J'ai essayé de suivre le tutoriel Android sur le partage de fichiers . J'ai configuré la FileProvider
comme ceci:
Sur le manifeste principal xml:
<provider
Android:name="Android.support.v4.content.FileProvider"
Android:authorities="com.example.mysecondapp.fileprovider"
Android:exported="false"
Android:grantUriPermissions="true" >
<meta-data
Android:name="Android.support.FILE_PROVIDER_PATHS"
Android:resource="@xml/filepaths" />
</provider>
le fichier res/xml/filpaths.xml:
<paths xmlns:Android="http://schemas.Android.com/apk/res/Android">
<external-path name="myexternalimages" path="SpCars_album/" />
</paths>
Et dans mon code, j'essaie ce qui suit:
File requestFile = new File(mImageFilenames[position]);
try {
fileUri = FileProvider.getUriForFile(
SeventhActivity.this,
"com.example.mysecondapp.fileprovider",
requestFile);
} catch (IllegalArgumentException e) {
Log.e("File Selector",
"The selected file can't be shared: " +
mImageFilenames[position]);
}
Le requestFile est instancié avec un chemin de travail correct pour un fichier . Le chemin de ce fichier commence exactement par ce que getExternalFilesDir(Environment.DIRECTORY_PICTURES)
retourne . Je ne peux tout simplement pas comprendre ce qui cause l'erreur car tout semble correspondre . Merci dans avance.
Le chemin d'accès à ce fichier commence exactement par ce que getExternalFilesDir (Environment.DIRECTORY_PICTURES) renvoie.
Autant que je sache, cela ne vous donnera pas un répertoire nommé SpCars_album/
.
Je ne peux tout simplement pas comprendre ce qui cause l'erreur car tout semble correspondre.
Le fichier que vous avez fourni ne peut pas être servi par la variable FileProvider
à partir de vos racines définies.
METTRE &AGRAVE; JOUR
J'ai oublié que cela est lié à un bogue de documentation sur FileProvider
. FileProvider
et <external-path>
servent PAS des fichiers provenant de getExternalFilesDir()
, mais plutôt de Environment.getExternalStorageDirectory()
. J'ai créé une sous-classe StreamProvider
qui offre un support pour getExternalFilesDir()
.
Si vous utilisez ma StreamProvider
en remplaçant votre <external-path>
par <external-files-path name="myexternalimages" path="Pictures/SpCars_album/" />
, vous devriez avoir plus de chance.
C'est une vieille question maintenant, mais je viens d'avoir un problème similaire.
Une solution paresseuse que j'ai trouvée consiste simplement à utiliser:
<external-path name="myexternalimages" path="Android/" />
Parce que getExternalStorageDirectory renvoie "/ storage/emulated/0 /", le partage/Android (niveau inférieur) permet d'accéder aux fichiers de votre application.
Alternativement, si vous voulez être plus précis, vous pouvez faire ceci:
<external-path name="myexternalimages" path="Android/data/YOUR_BUNDLE_ID/files/SpCars_album" />
Cela ne vous semble pas tout à fait correct, mais cela semble fonctionner!
L'ajout de implementation 'com.Android.support:support-v4:28.0.0'
dans les dépendances de l'application gradlle a fonctionné dans mon cas. Veuillez modifier la version de la plate-forme SDK (28.0.0 dans mon cas) en conséquence.