自定义Android Intent.ACTION_SEND

我使用意图共享url和主题。 在这个意图filter显示所有的共享应用程序。 我只想在(popup / facebook / gmail / message / skype / twitter)这些选项。 这是可以自定义共享意图filter。

Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); sharingIntent.setType("text/plain"); String shareBody = adapter.getDetails("url"; sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"subject"); sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody); startActivity(Intent.createChooser(sharingIntent, "Share via")); 

谢谢

Solutions Collecting From Web of "自定义Android Intent.ACTION_SEND"

是的,它可能检查下面显示Facebook,Gmail,Twitter的过滤。

更新为分享文字+图片:

从SD卡中select图像:

 String fileName = "image-3116.jpg"; String externalStorageDirectory = Environment.getExternalStorageDirectory().toString(); String myDir = externalStorageDirectory + "/saved_images/"; // the // file will be in saved_images Uri uri = Uri.parse("file:///" + myDir + fileName); 

通过Twitter分享

  Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType("text/plain"); shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, (String) v.getTag(R.string.app_name)); shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String) v.getTag(R.drawable.ic_launcher)); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); PackageManager pm = v.getContext().getPackageManager(); List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0); for (final ResolveInfo app : activityList) { if ("com.twitter.android.PostActivity".equals(app.activityInfo.name)) { final ActivityInfo activity = app.activityInfo; final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name); shareIntent.addCategory(Intent.CATEGORY_LAUNCHER); shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); shareIntent.setComponent(name); v.getContext().startActivity(shareIntent); break; } } 

通过Facebook分享

  Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType("text/plain"); shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, (String) v.getTag(R.string.app_name)); shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String) v.getTag(R.drawable.ic_launcher)); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); PackageManager pm = v.getContext().getPackageManager(); List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0); for (final ResolveInfo app : activityList) { if ((app.activityInfo.name).startsWith("com.facebook.katana")) { final ActivityInfo activity = app.activityInfo; final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name); shareIntent.addCategory(Intent.CATEGORY_LAUNCHER); shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); shareIntent.setComponent(name); v.getContext().startActivity(shareIntent); break; } } 

通过Gmail分享

  Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType("text/plain"); shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, (String) v.getTag(R.string.app_name)); shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String) v.getTag(R.drawable.ic_launcher)); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); PackageManager pm = v.getContext().getPackageManager(); List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0); for (final ResolveInfo app : activityList) { if ((app.activityInfo.name).contains("android.gm")) { final ActivityInfo activity = app.activityInfo; final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name); shareIntent.addCategory(Intent.CATEGORY_LAUNCHER); shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); shareIntent.setComponent(name); v.getContext().startActivity(shareIntent); break; } } 

通过WhatsApp分享:

  Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType("text/html"); shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, (String) v.getTag(R.string.app_name)); shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String) v.getTag(R.drawable.ic_launcher)); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); PackageManager pm = v.getContext().getPackageManager(); List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0); for (final ResolveInfo app : activityList) { if ((app.activityInfo.name).contains("com.whatsapp")) { final ActivityInfo activity = app.activityInfo; final ComponentName name = new ComponentName( activity.applicationInfo.packageName, activity.name); shareIntent.addCategory(Intent.CATEGORY_LAUNCHER); shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); shareIntent.setComponent(name); v.getContext().startActivity(shareIntent); break; } } 

单一方法的多function

share(String nameApp,String imagePath,String message)代码share(String nameApp,String imagePath,String message)function:

 public void share(String nameApp, String imagePath, String message) { try { List<Intent> targetedShareIntents = new ArrayList<Intent>(); Intent share = new Intent(android.content.Intent.ACTION_SEND); share.setType("image/jpeg"); List<ResolveInfo> resInfo = getPackageManager() .queryIntentActivities(share, 0); if (!resInfo.isEmpty()) { for (ResolveInfo info : resInfo) { Intent targetedShare = new Intent( android.content.Intent.ACTION_SEND); targetedShare.setType("image/jpeg"); // put here your mime // type if (info.activityInfo.packageName.toLowerCase().contains( nameApp) || info.activityInfo.name.toLowerCase().contains( nameApp)) { targetedShare.putExtra(Intent.EXTRA_SUBJECT, "Sample Photo"); targetedShare.putExtra(Intent.EXTRA_TEXT, message); targetedShare.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(imagePath))); targetedShare.setPackage(info.activityInfo.packageName); targetedShareIntents.add(targetedShare); } } Intent chooserIntent = Intent.createChooser( targetedShareIntents.remove(0), "Select app to share"); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[] {})); startActivity(chooserIntent); } } catch (Exception e) { Log.v("VM", "Exception while sending image on" + nameApp + " " + e.getMessage()); } } 

为了在gmail,facebook,twitter上附加图片,使用下面的代码。

 File filePath = new File("your image path"); share("gmail", filePath.toString(),"your comment"); share("facebook", filePath.toString(),"your comment"); share("twitter", filePath.toString(),"your comment"); 

上面给出的答案在我的手机上打开Facebook聊天应用程序 为以下工作!

 Intent sharingIntent = new Intent(Intent.ACTION_SEND); sharingIntent.setType("text/plain"); sharingIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); sharingIntent.putExtra(Intent.EXTRA_TEXT, "Text..."); PackageManager packManager = getPackageManager(); List<ResolveInfo> resolvedInfoList = packManager.queryIntentActivities(sharingIntent, PackageManager.MATCH_DEFAULT_ONLY); boolean resolved = false; for(ResolveInfo resolveInfo: resolvedInfoList){ if(resolveInfo.activityInfo.packageName.startsWith("com.facebook.katana")){ sharingIntent.setClassName( resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name ); resolved = true; break; } } if(resolved){ startActivity(sharingIntent); }else{ Builder alert = new AlertDialog.Builder(ActivityName.this); alert.setTitle("Warning"); alert.setMessage("Facebook App not found"); alert.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { dialog.dismiss(); } }); alert.show(); } 

如果不使用facebook sdk,则不能共享图像。

https://developers.facebook.com/x/bugs/332619626816423/