kir*_*403 3 android image android-intent
我使用Android的默认共享意图将图像共享给其他应用程序.但我想添加一个选项Save to Gallery
,将图像直接保存到媒体或图像或我的应用程序文件夹中的图库.
目前我使用简单的代码来共享图像:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, "Share to"));
Run Code Online (Sandbox Code Playgroud)
当我从个人资料图片中尝试WhatsApp的分享按钮时,可以选择" Save To Gallery
"选项.现在,我开始知道,它不是预先构建的android.这是WhatsApp添加的手动操作,它以某种方式将图像保存到特定路径.在长按" Save to gallery
"按钮显示,该动作是WhatsApp的应用程序.这意味着WhatsApp为它编写了一些逻辑.它ACTION_SEND
与image/*
mime类型具有相同的默认意图,并带有其他自定义操作" Save to Gallery
".
那完全没问题.我也希望为我的应用添加这种逻辑.我可以注册<intent-filter>
哪个可以处理此操作,但它将全局接受来自任何应用程序的任何图像以保存到图库.
如何为我的共享Intent或<intent-filter>
活动添加手动操作,该操作仅适用于我的应用程序(仅限我的应用程序可见),并用于将图像保存到图库?
以下代码片段执行以下操作:首先,我们正在查询系统中的IntentActivities,它可以处理我们的Share-Intent.之后,我们构建了一个LabeledIntents列表.最后,我们将自定义共享操作添加到此列表中,我们将使用默认选择器对话框向用户显示列表.
public Intent getNativeShareIntent(final Context context) {
final PackageManager pm = context.getPackageManager();
final Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
sendIntent.setType("image/jpeg");
List<ResolveInfo> resInfo = pm.queryIntentActivities(sendIntent, 0);
List<LabeledIntent> intentList = new ArrayList<>();
for (int i = 0; i < resInfo.size(); i++) {
ResolveInfo ri = resInfo.get(i);
String packageName = ri.activityInfo.packageName;
final Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, ri.activityInfo.name));
intent.setPackage(packageName);
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
intent.setType("image/jpeg");
intentList.add(new LabeledIntent(intent, packageName, ri.loadLabel(pm),
ri.getIconResource()));
}
// TODO Implement the method getSaveToGalleryIntent,
// Could be a simple intent linking to activity.
intentList.add(getSaveToGalleryIntent(context));
Intent openInChooser = Intent.createChooser(intentList.remove(0),
"Share");
LabeledIntent[] extraIntents = intentList.toArray(new LabeledIntent[intentList.size()]);
openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
return openInChooser;
}
private Intent getSaveToGalleryIntent(final Context context, final Uri imgUrl) {
final Intent intent = new Intent(context, SaveToGalleryActivity.class);
intent.putExtra(SaveToGalleryActivity.EXTRA_KEY_CONTENT, imgUrl);
return new LabeledIntent(intent, BuildConfig.APPLICATION_ID,
"Save to gallery",
R.drawable.ic_save_to_gallery);
}
Run Code Online (Sandbox Code Playgroud)