我能够从从通知栏获取的 URI 中获取文件路径,但我只能从从 Android Snackbar 接收到的 URI 中获取它。
当前用于获取路径的函数:
注意:这适用于 Marshmallow 之前的 Android 版本。
private String extractContentUri(Uri uri) {
Cursor cursor = null;
try {
cursor = getContentResolver().query(uri, null, null, null, null);
Log.d("CHECK", "COUNT" + cursor.getCount());
if (cursor != null && cursor.moveToFirst()) {
Log.d("CHECK", "CURSOR !NULL");
launchedFile = cursor.getString(cursor.getColumnIndexOrThrow("_data"));
Log.d("CHECK", "==" + launchedFile);
return launchedFile;
}
} catch (IllegalArgumentException e) {
} finally {
Log.d("CHECK", "{finally} ==" + launchedFile);
if (cursor != null) {
cursor.close();
cursor = null;
}
}
return null;
}
在 android M 中,从通知栏和快餐栏访问时获得的 URI 是不同的。
- 来自通知栏的 URI:
content://downloads/all_downloads/1449
- 来自小吃店的 URI:
content://downloads/my_downloads/1449
cursor = getContentResolver().query(uri, null, null, null, null);
此处的光标.getCount()
始终为 0 用于小吃吧。