Diamo uno sguardo a FileProvider
codice:
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
accettati sentieri assoluti alla directory con l'aiuto di tag root-path
(costante DEVICE_ROOT). Quindi, basta aggiungere percorso assoluto alla vostra cartella dei file nel disco esterno secondario come di seguito:
<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" />
Nota official documentation non dice nulla circa <root-path>
, quindi potrebbe cambiare in un futuro.
Grazie! Ma a me sembra un po 'troppo caro. Vedi, nei documenti si dice che la memoria esterna dovrebbe essere scoperta se è semi-permanente come lo slot per schede SD in un vano batteria. Ma stai dicendo che la scheda SD è una memoria secondaria esterna e credo che a partire dalla 4.4 non venga scoperta tramite l'API di archiviazione. – zgulser
In realtà nel termine di Android, sia "memoria interna" che "scheda SD" possono essere "memoria esterna".Ad esempio, usa il vecchio telefono Motorola Defy, ha solo 1 "memoria esterna", che è la scheda SD, quindi la scheda SD è la "memoria esterna primaria". Moto G, o un telefono Nexus, ha solo "memoria interna" ma nessuna scheda SD, quindi "memoria interna" è la "memoria esterna primaria" qui. Per i telefoni Samsung, hanno sia la memoria interna che la scheda SD, questa volta la memoria interna è la 'memoria esterna primaria', mentre' sd card' è la 'memoria esterna secondaria'. –
Per confondere la questione ancora di più, viene la "memoria interna", la verità è che tutto il telefono deve avere "MEMORIA interna", solo grande o no. Usa lo stesso esempio, MEMORY interno di Defy è piccolo e usato solo come 'memoria interna ', mentre il nuovo modello di solito ha una memoria interna più grande, quindi solo una parte di esso è assegnata come' memoria interna' –