问题描述
Android 11
targetApi 30
不要请求 READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE
使用 SAF api 获得这样的 uri:
“content://com.android.providers.media.documents/document/document%3”
并像这样解析 uri:
public static String getRealPath(uri) {
String docId = DocumentsContract.getDocumentId(uri);
String[] split = docId.split(":");
String type = split[0];
Uri contentUri;
switch (type) {
case "image":
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
break;
case "video":
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
break;
case "audio":
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
break;
default:
contentUri = MediaStore.Files.getContentUri("external");
}
String selection = "_id=?";
String[] selectionArgs = new String[]{
split[1]
};
return getDataColumn(getContext(),contentUri,selection,selectionArgs);
}
public static String getDataColumn(Context context,Uri uri,String selection,String[] selectionArgs) {
Cursor cursor = null;
String column = "_data";
String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri,projection,selectionArgs,null);
if (cursor != null && cursor.movetoFirst()) {
int column_index = cursor.getColumnIndexOrThrow(column);
String value = cursor.getString(column_index);
if (value.startsWith("content://") || !value.startsWith("/") && !value.startsWith("file://")) {
return null;
}
return value;
}
} catch (Exception e) {
e.printstacktrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
return null;
}
我在 android 11 以下的手机上得到正常值,但在 android 11 手机上得到空值
有人可以帮我吗?
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)