2016-08-30 3 views
8

ich eine FileProvider mit den folgenden res/xml/file_paths.xml gesetzt haben:dynamisch ersetzen applicationId im file_paths.xml

<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <external-path name="suggestions" path="Android/data/com.example.app.dev/files/suggestions" /> 
</paths> 

Das Problem ist, dass ich viele Produkt Aromen haben, die die applicationId ändern. Gibt es eine Möglichkeit, diesen Wert durch die richtige applicationId zu ersetzen, ohne einen Dateipfad für jedes Produkt-Flavor zu erstellen? Wie ein Tag wie dieses zu ersetzen Android/data/{appId}/files/suggestions? Oder sogar einen relativen Pfad verwenden ... (Ich habe alles versucht, aber nur dieser vollständige Pfad funktionierte).

Antwort

8

gelang es mir, dieses Problem zu lösen, indem Gradle mit einem String-Ressource-Wert in der build.gradle Datei dynamisch erstellen den Dateipfad zu repräsentieren:

defaultConfig { 
    applicationId "com.example.myapp" 
    ... 
    resValue 'string', 'images_file_path', "Android/data/" + applicationId + "/files/Pictures" 
} 

Anschließend können Sie diesen Zeichenfolge Ressourcenwert in den res/xml/file_paths.xml Referenz

<?xml version="1.0" encoding="utf-8"?> 
<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <external-path name="my_images" android:path="@string/images_file_path" /> 
</paths> 
+1

FileProvider wird nicht den Wert von 'path' Attribut lesen, wenn Sie' android: 'Namespace setzen. So sieht der URI aus, wenn Sie 'path =" Android/data/com.example.myapp/files/Pictures "' schreiben: content: //com.example.myapp.photos_provider/my_images/my_file.jpg. Das ist der richtige. Aber wenn Sie 'android: path =" Android/data/com.example.myapp/files/Pictures "' (oder verwenden Sie Zeichenfolge aus Ressourcen wie in Ihrer Antwort) Sie erhalten: content: //com.example.myapp. fotos_provider/my_images/Android/data/com.beispiel.meinapp/dateien/Bilder/meine_datei.jpg. Sie profitieren also nicht von der Verwendung von FileProvider. – RustamG

+0

es funktioniert nicht für mich :( –

4

Sie brauchen nicht applicationId in Ihrem file_paths.xml überhaupt zu benutzen. Ersetzen Sie einfach die external_path Klausel mit:

<external-files-path name="my_images" path="Pictures" /> 

Dies wird 24.0.0 oder höher der Support-Bibliotheken erfordern.

Lösung kopiert von https://stackoverflow.com/a/40563179/1033645.

Verwandte Themen