我已将其中一项活动设置为从其他应用程序接收图像:
<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
方案以防止此问题,但似乎还不够。那么从其他应用程序获取图像的最佳方法是什么?
有没有更好的解决方案呢?
答案 0 :(得分:0)
您的getType()
和if(myObject instanceof Piece && myObject.getClass() != Piece.class) {
// do stuff
}
代码都不正确。在content
的情况下,您假设file
知道图像并且有一个可以使用的路径,这两个路径都不一定正确。在content
的情况下,您获得MediaStore
,将其转换为file
,然后将其转换回Uri
,原因并非明显。
在这两种情况下,String
Uri
。除了将其传递给extra.getParcelable(Intent.EXTRA_STREAM)
之外,没有必要对此做任何事情。