android - 如果我的 uri 以“content://com.google.android.apps”开头,我如何从中获取位图
问题描述
我从android设备文件中选择,我得到了以“content://com.google.android.app”开头的uri,由于某种原因我无法将它加载到位图中,
编码
public void insertImage(View view) {
Intent chooseFile;
Intent intent;
chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
chooseFile.setType("*/*");
chooseFile.addCategory(Intent.CATEGORY_OPENABLE);
intent = Intent.createChooser(chooseFile, "Choose a file");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(intent, PICKFILE_RESULT_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case PICKFILE_RESULT_CODE:
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
String str = data.getData().toString();
String mimeType = getContentResolver().getType(uri);
try {
// User content resolver to get uri input stream.
InputStream inputStream =
getContentResolver().openInputStream(uri);
// Get the bitmap.
Bitmap imgBitmap = BitmapFactory.decodeStream(inputStream);
// Show image bitmap in imageview object.
imageView.setImageBitmap(imgBitmap);
}catch(FileNotFoundException ex)
{
Log.e(TAG, ex.getMessage(), ex);
}
}
break;
}
}
有任何想法吗?
解决方案
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case PICKFILE_RESULT_CODE:
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
getBitmapFromUri(this, uri);
imageView.setImageBitmap(imgBitmap);
}
break;
}
}
public static Bitmap getBitmapFromUri(Context context, Uri uri) {
ParcelFileDescriptor parcelFileDescriptor = null;
try {
parcelFileDescriptor =
context.getContentResolver().openFileDescriptor(uri, "r");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
parcelFileDescriptor.close();
return image;
} catch (Exception e) {
Log.e(TAG, "Failed to load image.", e);
return null;
} finally {
try {
if (parcelFileDescriptor != null) {
parcelFileDescriptor.close();
}
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "Error closing ParcelFile Descriptor");
}
}
}
推荐阅读
- rrdtool - 如何创建具有特定时间的rrd文件?
- javascript - 无法创建 HTML
- authentication - 如何实现跨域单点登录
- java - 更新 Intellij 2019.1 后未指定模块
- ios - 通过 Facebook 登录不适用于我的 iOS 应用
- r - rtruncnorm 中的经验参数
- javascript - 如何使 SVG 地图响应其父元素的宽度
- amazon-iam - AWS IAM 一致性问题
- mysql - 无法限制来自特定主机的 mysql AURORA 访问。错误 1045 (28000): Access denied for user 'user'@'10.1.21.54'
- woocommerce - Woocommerce:如何更改标准按钮路由用户的网址