【发布时间】:2017-02-02 22:47:32
【问题描述】:
我已将我的一项活动设置为从其他应用程序接收图像:
<activity
android:name=".activities.GetShareImage"
android:screenOrientation="portrait">
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>
并在我的应用程序中使用该图像。但我有时会遇到这个异常:
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{********.activities.GetShareImage}: java.lang.IllegalArgumentException: column '_data' does not exist
我的代码是这样的:
Intent intent = getIntent();
if (intent != null){
String action = intent.getAction();
String type = intent.getType();
if(Intent.ACTION_SEND.equals(action) && type != null){
if(type.startsWith("image/")){
Bundle extra = intent.getExtras();
if(extra.containsKey(Intent.EXTRA_STREAM)){
Uri imageUri = extra.getParcelable(Intent.EXTRA_STREAM);
if (imageUri != null){
String Scheme = imageUri.getScheme();
if(Scheme.equals("content")){
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(imageUri, null, null, null, null);
cursor.moveToFirst();
String ImagePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
if (ImagePath != null) {
Uri imageURI = Uri.fromFile(new File(ImagePath));
startCropActivity(imageURI);
}else {
finish();
}
} else if (Scheme.equals("file")){
Uri imgUri = Uri.parse(extra.getParcelable(Intent.EXTRA_STREAM).toString());
startCropActivity(imgUri);
}
} else {
finish();
}
}
}
}
}
我已经检查了Uri 方案来防止这个问题,但似乎这还不够。那么从其他应用程序获取图像的最佳方法是什么?
有没有更好的解决方案?
【问题讨论】:
-
为什么你认为
imageUri指向媒体存储?为什么你认为它根本指向某个文件?
标签: android android-intent intentfilter mediastore