Lassen Sie uns einen Blick auf FileProvider
Code nehmen:
private static PathStrategy parsePathStrategy(Context context, String authority)
...
int type;
while ((type = in.next()) != END_DOCUMENT) {
if (type == START_TAG) {
final String tag = in.getName();
final String name = in.getAttributeValue(null, ATTR_NAME);
String path = in.getAttributeValue(null, ATTR_PATH);
File target = null;
if (TAG_ROOT_PATH.equals(tag)) {
target = buildPath(DEVICE_ROOT, path);
} else if (TAG_FILES_PATH.equals(tag)) {
target = buildPath(context.getFilesDir(), path);
} else if (TAG_CACHE_PATH.equals(tag)) {
target = buildPath(context.getCacheDir(), path);
} else if (TAG_EXTERNAL.equals(tag)) {
target = buildPath(Environment.getExternalStorageDirectory(), path);
}
if (target != null) {
strat.addRoot(name, target);
}
}
}
return strat;
}
FileProvider
absolute pathes in das Verzeichnis mit Hilfe von Tag root-path
(DEVICE_ROOT Konstante) akzeptiert. So fügen Sie einfach absoluten Pfad zu Ihren Dateien Ordner in sekundärer externer Disc wie unten:
<root-path path="/storage/extSdCard/Android/data/com.edufii/files/image/" name="image-ext2" />
<root-path path="/storage/extSdCard/Android/data/com.edufii/files/video/" name="video-ext2" />
<root-path path="/storage/extSdCard/Android/data/com.edufii/files/datafile/" name="datafile-ext2" />
<root-path path="/storage/extSdCard/Android/data/com.edufii/files/audio/" name="audio-ext2" />
Hinweis official documentation sagt nichts über <root-path>
, so dass es in einer Zukunft geändert werden.
Vielen Dank! Aber es scheint mir ein bisschen vous. Sehen Sie, in den Dokumenten wird gesagt, dass externer Speicher aufgetaucht werden sollte, wenn es wie ein SD-Kartensteckplatz in einem Batteriefach halbpermanent ist. Aber du sagst, dass SD-Karte ein sekundärer externer Speicher ist, denke ich und ab 4.4 ist es nicht durch die Speicher-API aufgetaucht. – zgulser
Eigentlich in androids Begriff, sowohl "interner Speicher" und "SD-Karte" kann "externer Speicher" sein.Verwenden Sie das alte Handy Motorola Defy als Beispiel, es hat nur 1 "externe Speicher", das ist SD-Karte, so dass die SD-Karte ist "primären externen Speicher". Moto G, oder ein Nexus-Handy, es hat nur "internen Speicher", aber keine SD-Karte, so "interner Speicher" ist hier der "primäre externe Speicher". Für Samsung-Handys haben sie sowohl internen Speicher und SD-Karte, dieses Mal ist der interne Speicher der "primäre externe Speicher", während "SD-Karte" ist der "sekundäre externe Speicher". –
Um die Sache noch mehr zu verwirren, kommt es "interner Speicher", die Wahrheit ist, dass alle Telefone "internen MEMORY" haben müssen, nur groß oder nicht. Verwenden Sie das gleiche Beispiel, Defy's internes MEMORY ist klein und wird nur als 'interner Speicher' verwendet, während neue Modelle normalerweise einen größeren internen Speicher haben, also nur ein Teil davon als 'interner Speicher' zugewiesen ist. –