IllegalArgumentException: Failed to find configuration Wurzel enthält xxx auf FileProvider.getUriForFile
Ich habe versucht zu Folgen, die Android-tutorial auf Freigabe von Dateien.
Ich FileProvider
wie diese:
Auf dem wichtigsten manifest 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>
den res/xml/filpaths.xml Datei:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="myexternalimages" path="SpCars_album/" />
</paths>
Und in meinem code versuche ich die folgende:
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]);
}
Des requestFile instanziiert wird, mit einer einwandfreien Pfad für eine Datei.
Der Pfad der Datei beginnt genau mit dem, was getExternalFilesDir(Environment.DIRECTORY_PICTURES)
gibt.
Ich kann es nicht verstehen, was die den Fehler auslöst, da scheint alles zu passen.
Vielen Dank im Voraus.
InformationsquelleAutor der Frage Hummus | 2013-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
AFAIK, das wird nicht geben Ihnen ein Verzeichnis mit dem Namen
SpCars_album/
.Die Datei, die Sie geliefert wird, ist nicht eine, die bedient werden können, durch die
FileProvider
von Ihrem angegebenen Wurzeln.UPDATE
Ich habe vergessen, dass dies gebunden ist eine Dokumentation der Fehler auf
FileProvider
.FileProvider
und<external-path>
hat NICHT dienen Dateien vongetExternalFilesDir()
sondern vonEnvironment.getExternalStorageDirectory()
. Ich erstellte einStreamProvider
- Unterklasse, die bietet Unterstützung fürgetExternalFilesDir()
.Wenn Sie meine
StreamProvider
ersetzen Sie Ihre<external-path>
mit<external-files-path name="myexternalimages" path="Pictures/SpCars_album/" />
sollten Sie mehr Glück haben.InformationsquelleAutor der Antwort CommonsWare
Dies ist eine alte Frage, aber ich habe gerade ein ähnliches Problem.
Eine faule Lösung, die ich gefunden ist, um Sie nur:
Weil getExternalStorageDirectory kehrt zurück "/storage/emulated/0/", "Freigabe" /Android (die nächste Ebene) können Sie alle Dateien, die in Ihre app zugegriffen werden.
Alternativ, wenn Sie möchten, um genauer zu sein, können Sie dies tun:
Dieser fühlt sich nicht ganz richtig ist, aber es scheint zu funktionieren!
InformationsquelleAutor der Antwort eAi
wenn Sie dont try catch exception IllegalArgumentException für FileProvider.getUriFoFile(), wenn Sie führen Sie den code ,müssen Sie auch diese Ausnahme.
InformationsquelleAutor der Antwort 夏廣成