我正在尝试允许我的用户通过其设备中安装的任何注释应用来编辑图像。 为此,我将应用程序中的图像发送到另一个应用程序进行编辑并将其检索回来。 我在Xamarin.Android中使用以下代码 -
var imgIntent = new Intent (Intent.ActionEdit);
var imgItem = (File)ImageAdapter.GetItem (p0.ItemId);
var imgFileName = imgItem.Name;
AndroidController.Current.SetImgFileName(Activity, imgFileName);
imgIntent.PutExtra (Intent.ExtraStream,
Uri.FromFile (imgItem));
imgIntent.SetType ("image/*");
if (Utils.CheckIntentAvailable (Activity, imgIntent)) {
StartActivity (imgIntent);
} else {
Toast.MakeText(Activity.ApplicationContext, "xyz", ToastLength.Long).Show();
}
当我选择" Skitch"时,图像完全转移到skitch,并在我的应用与我的应用共享后重新进入我的应用。
但是,当我选择" Inkboard"出于同样的目的,Inkboard app Intent触发,但它不会选择我在Intent Extras中发送的图像。
有谁可以弄清楚这里发生了什么? 提前致谢。
答案 0 :(得分:0)
注意:我不知道有关xamarin的任何想法
根据https://developer.android.com/reference/android/content/Intent.html#ACTION_EDIT,要编辑的uri应该进入Intent.data
。
您的代码使用的是Intent.ExtraStream,而不是标准的。
我使用这个java代码来编辑jpg
final Intent imgIntent = new Intent()
.setAction(Intent.ACTION_EDIT)
// .putExtra(Intent.EXTRA_STREAM, uri)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// #64 edit allow to modify file
imgIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
}
File file = new File("/sd/path/to/image.jpg");
final Uri uri = Uri.fromFile(file);
imgIntent.setData(uri);
// imgIntent.setDataAndType(uri, "image/*");
startActivity (imgIntent);
注意:如果您使用
startActivityForResult(imgIntent);
当编辑完成或通过onActivityResult(...)