J'essaie d'obtenir le vrai chemin d'un fichier stocké dans le Android (je teste sur un émulateur avec Android 8.1
)
voici mon code:
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);
Pour les versions antérieures de Android 8.0
, La variable id
contient une valeur long
afin que la ligne suivante fonctionne comme prévu.
Sur Android 8
La variable id
contient un chemin comme celui-ci raw:/storage/emulated/0/Download/my_file.pdf
, Donc le casting Long.valueOf(id))
lance un 'Java.lang.NumberFormatException' Exception.
Des idées? Merci.
Si le même problème l'avait résolu en procédant comme suit.
final String id = DocumentsContract.getDocumentId(uri);
if (!TextUtils.isEmpty(id)) {
if (id.startsWith("raw:")) {
return id.replaceFirst("raw:", "");
}
try {
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);
} catch (NumberFormatException e) {
return null;
}
}
La solution a été trouvée dans un commentaire https://github.com/Yalantis/uCrop/issues/318