Androidファイルシステムに保存されているファイルの実際のパスを取得しようとしています(_Android 8.1
_を使用してエミュレータでテストしています)
これが私のコードです:
_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);
_
以前のバージョンの_Android 8.0
_では、変数id
にlong
値が含まれているため、次の行は期待どおりに機能します。
_Android 8
_では、変数id
にこのような_raw:/storage/emulated/0/Download/my_file.pdf
_のようなパスが含まれているため、キャストLong.valueOf(id))
は_'Java.lang.NumberFormatException' Exception.
_をスローします
何か案は?ありがとう。
同じ問題が次のようにして解決しました。
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;
}
}
コメントで解決策が見つかりました https://github.com/Yalantis/uCrop/issues/318