如何解决如何在android 10及更高版本的android中获取捕获图像和图库图像的真实路径
为了获得捕获图像和画廊图像的真实路径,以下代码对我来说非常合适。
private String getRealPathFromURI(Uri contentUri) {
String result = null;
try{
String[] proj = { MediaStore.Images.Media.DATA };
CursorLoader loader = new CursorLoader(requireActivity(),contentUri,proj,null,null);
Cursor cursor = loader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
result = cursor.getString(column_index);
cursor.close();
}catch(Exception e){
Log.i("error_getting_path",e.getMessage());
}
return result;
}
但是在android 10及更高版本的设备中,我无法获取捕获和图库图像的路径。 因此我的应用无法在android 10及更高版本中使用此功能。 请提出在所有android设备中获取路径的最佳方法。
解决方法
private static String getRealPathFromURI(Uri uri) {
Uri returnUri = uri;
Cursor returnCursor = getContentResolver().query(returnUri,null,null);
int nameIndex = returnCursor.getColumnIndex( OpenableColumns.DISPLAY_NAME);
returnCursor.moveToFirst();
String name = (returnCursor.getString(nameIndex));
File file = new File(context.getFilesDir(),name);
try {
InputStream inputStream = context.getContentResolver().openInputStream(uri);
FileOutputStream outputStream = new FileOutputStream(file);
int read = 0;
int maxBufferSize = 1 * 1024 * 1024;
int bytesAvailable = inputStream.available();
int bufferSize = Math.min(bytesAvailable,maxBufferSize);
final byte[] buffers = new byte[bufferSize];
while ((read = inputStream.read(buffers)) != -1) {
outputStream.write(buffers,read);
}
inputStream.close();
outputStream.close();
Log.e("File Path","Path " + file.getAbsolutePath());
} catch (Exception e) {
Log.e("Exception",e.getMessage());
}
return file.getAbsolutePath();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。