Android 使用自定义“保存到库”选项共享图像意图
我使用Android的默认共享意图将图像共享给其他应用程序。但我想添加一个选项,如Android 使用自定义“保存到库”选项共享图像意图,android,image,android-intent,Android,Image,Android Intent,我使用Android的默认共享意图将图像共享给其他应用程序。但我想添加一个选项,如保存到图库,它可以将图像直接保存到媒体、图像或我的应用程序文件夹中的图库中 目前我正在使用简单的代码共享图像: Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); shareIntent.
保存到图库
,它可以将图像直接保存到媒体、图像或我的应用程序文件夹中的图库中
目前我正在使用简单的代码共享图像:
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"));
当我从个人资料图片中尝试WhatsApp的共享按钮时,有一个选项“保存到图库”
”选项。现在,我知道了,它不是android中的预构建。这是WhatsApp添加的手动操作,它以某种方式将图像保存到特定路径。长按“Save to gallery
”按钮显示,该操作是WhatsApp的应用程序。这意味着WhatsApp为它写了一些逻辑。它与默认的操作\u SEND
intent和image/*
mime类型相同,并带有一个附加的自定义操作“保存到库中”
”
那太好了。我也想为我的应用程序添加这种逻辑。我可以注册
,它可以处理此操作,但它将全局接受任何应用程序中的任何图像以保存到gallery
我如何才能为我的共享意图或
活动添加手动操作,该操作只能特定于我的应用程序(仅在我的应用程序中可见),并用于将图像保存到Gallery?以下代码片段执行以下操作:
首先,我们查询系统的意向性,它可以处理我们的共享意向。之后,我们建立了一个标签帐篷列表。最后,我们将自定义共享操作添加到此列表中,并使用默认选择器对话框将该列表呈现给用户
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);
}
公共意图GetNativeShareContent(最终上下文){
final-PackageManager pm=context.getPackageManager();
最终意图sendIntent=新意图(Intent.ACTION\u SEND);
sendIntent.putExtra(Intent.EXTRA_流,Uri.fromFile(文件));
setType(“图像/jpeg”);
List resInfo=pm.querytentActivities(sendIntent,0);
List intentList=new ArrayList();
对于(int i=0;i
我们是否可以在单击“保存到库”选项时调用方法(下载图像并保存到库中),而不是调用活动?您必须添加意图。不能直接调用具有意图的方法。但您可以尝试使用广播接收器意图,而不是调用活动。此问题的最终解决方案是什么?遇到类似的问题