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.

我使用Android的默认共享意图将图像共享给其他应用程序。但我想添加一个选项,如
保存到图库
,它可以将图像直接保存到媒体、图像或我的应用程序文件夹中的图库中

目前我正在使用简单的代码共享图像:

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
我们是否可以在单击“保存到库”选项时调用方法(下载图像并保存到库中),而不是调用活动?您必须添加意图。不能直接调用具有意图的方法。但您可以尝试使用广播接收器意图,而不是调用活动。此问题的最终解决方案是什么?遇到类似的问题