1

Ich habe in den FileUriExposedException Sachen, wo Sie versuchen, eine Datei zu senden: /// Uri zu einer anderen App (in diesem Fall die Kamera), und ich sollte stattdessen einen FileProvider verwenden (verursacht einen Absturz auf api 24 Nougat) .Unterstützt der FileProvider von Android tatsächlich externe Dateien?

In unserer App erzeugen wir eine Datei Kontext mit getExternalFilesDir(String) Methode:

context.getExternalFilesDir("attachments"); 

Die FileProvider documentation führt mich in sein mit external-files-path zu glauben, soll ich meine paths.xml, wenn ich möchte, dass die Funktionalität das gleiche sein wie jetzt .

<?xml version="1.0" encoding="utf-8"?> 
<paths> 
    <external-files-path 
     name="attachments" 
     path="attachments/" /> 
</paths> 

Aber nach ein paar mehr, fand ich ein paar Dinge googeln, die mich dort denken ist Probleme mit FileProvider oder zumindest FileProvider Dokumentation ...

So

  1. Bin ich recht in der Annahme sollte ich external-files-path verwenden, wenn ich passen wollen, wie meine App funktioniert zur Zeit?
  2. Ist die Dokumentation/FileProvider wirklich defekt/falsch und ich sollte stattdessen etwas wie cwac-provider verwenden?

UPDATE

Für Vollständigkeit, wie @CommonsWare unten empfohlen, die 24.2.0-Version von support-v4 mit mir arbeitet.

Antwort

2

Bin ich richtig, wenn ich denke, dass ich external-files-path verwenden soll, wenn ich die Funktionsweise meiner App vergleichen möchte?

Ja. Beachten Sie jedoch, dass getExternalFilesDir() does not officially support "attachments" as a parameter, so seien Sie nicht überrascht, wenn Ihre App eines Tages bricht.

Ist die Dokumentation/FileProvider wirklich gebrochen/falsch

Nun sehe ich den Code für external-files-path Unterstützung in der JAR-Quellen für 24.2.0 des neuen support-core-utils Artefakt. support-v4, ab 24.2.0, wurde in eine Reihe von separaten Artefakten unterteilt, und FileProvider lebt in support-core-utils.

Versuchen Sie also, 24.2.0 von support-v4 (oder support-core-utils zu verwenden, wenn Sie nicht alle support-v4 benötigen).

+0

Wow! Danke für die sehr schnelle und sehr hilfreiche Antwort! Ich werde 24.2 Support-v4 versuchen. Andererseits meinen Sie, dass es "Anhänge" nicht unterstützt, da das von mir angegebene Argument "String type" idealerweise eines der in der Dokumentation erwähnten sein sollte (beginnend mit 'DIRECTORY _...')? – Josh

+0

@Josh: Ja, idealerweise ist es 'null' oder einer der angegebenen unterstützten Werte. * Wahrscheinlich * werden sie weiterhin willkürliche Strings unterstützen, da sie die Überprüfung hier nie implementiert haben, aber wir können nicht ausschließen, dass sie die Regeln durchsetzen werden. – CommonsWare

+0

ah ok ich verstehe. Danke, dass du das gezeigt hast! Es ist etwas, was wir sehen werden. sehr hilfreiches Zeug! – Josh

0

Ich hatte ähnliches Szenario der Freigabe einer privaten Datei an die Kamera, um volle Qualität Bild ohne eine Erlaubnis zu WRITE_EXTERNAL_STORAGE zu laden.

konnte ich es mithilfe der funktioniert als

<?xml version="1.0" encoding="utf-8"?> 
<paths> 
    <external-path 
     name="my_images" 
     path="Android/data/com.santhoshn.appprivateimageupload/files/Pictures" /> 
</paths> 

folgt Hier ist die Arbeitsbeispielanwendung https://github.com/santbob/AppPrivateImageUpload

+0

Während der Link die Frage beantworten kann, ist es immer am besten, die wichtigsten Teile der Informationen in Ihre Antwort aufzunehmen. Dadurch können Benutzer die Informationen auch dann finden, wenn die Verbindung unterbrochen ist. Darüber hinaus können Benutzer die Informationen leichter finden als über einen externen Link. –

+0

danke für die Eingabe, wird meine ursprüngliche Antwort aktualisieren – SanthoshN

Verwandte Themen