如何在Android中自定义共享意图?

现在我可以使用共享意图打开共享对话框

Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, link); startActivity(Intent.createChooser(intent, "Share with")); 

但我需要的对话框不会出现,并直接共享到一个社交networking,例如(FB或Twitter)

任何build议如何做到这一点?

不,你不能。 意图应该这样工作。 如果您必须强制打开特定的应用程序,请使用明确的目标(如果目标应用程序支持这些应用程序)。 在不知道目标应用程序的软件包名称或组件名称,或数据的types或MIMEtypes的情况下,您无法强制特定的应用程序使用通用意图。

有一种方法可以直接打开你想要的意图。 你可以得到意向清单,只打开一个。

看到这个代码:

 private void initShareIntent(String type) { boolean found = false; Intent share = new Intent(android.content.Intent.ACTION_SEND); share.setType("image/jpeg"); // gets the list of intents that can be loaded. List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(share, 0); if (!resInfo.isEmpty()){ for (ResolveInfo info : resInfo) { if (info.activityInfo.packageName.toLowerCase().contains(type) || info.activityInfo.name.toLowerCase().contains(type) ) { share.putExtra(Intent.EXTRA_SUBJECT, "subject"); share.putExtra(Intent.EXTRA_TEXT, "your text"); share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(myPath)) ); // Optional, just if you wanna share an image. share.setPackage(info.activityInfo.packageName); found = true; break; } } if (!found) return; startActivity(Intent.createChooser(share, "Select")); } } 

如果你想打开微博,那么做:

 initShareIntent("twi"); 

如果Facebook:

 initShareIntent("face"); 

如果邮件:

 initShareIntent("mail"); // or "gmail" 

如果你想显示与该types相匹配的意图列表,请使用第一个mach,请参阅此帖: Android Intent for Twitter应用程序

首先,列出所有的应用程序共享。

 private java.util.List<ResolveInfo> showAllShareApp() { java.util.List<ResolveInfo> mApps = new ArrayList<ResolveInfo>(); Intent intent = new Intent(Intent.ACTION_SEND, null); intent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); intent.setType("text/plain"); PackageManager pManager = getPackageManager(); mApps = pManager.queryIntentActivities(intent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); return mApps; } 

然后,select一个

  private void share(ResolveInfo appInfo) { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); if (appInfo != null) { sendIntent .setComponent(new ComponentName( appInfo.activityInfo.packageName, appInfo.activityInfo.name)); } sendIntent.setType("text/plain"); // startActivity(Intent.createChooser(sendIntent, "Share")); startActivity(sendIntent); } 

这是一个示例项目,希望它有帮助。

您可以使用ACTION_SENDTO来获取所有电子邮件客户端

  Intent getMailClients = new Intent(Intent.ACTION_SENDTO); getMailClients.setData(Uri.parse("mailto:")); final PackageManager pm = this.getPackageManager(); final List<ResolveInfo> emailsClients = pm.queryIntentActivities(getMailClients, 0); if (emailsClients.size() == 0) { Toast.makeText(this, "There are no email clients installed", Toast.LENGTH_LONG).show(); return; } 

然后创build自己的select器(与创build的应用程序列表的对话框)。 当用户点击物品,你可以做这样的行为。

  Intent sendMailIntent = new Intent(Intent.ACTION_SEND); sendMailIntent.setType(some type like text/plain or other you need); ... there you can set SUBJECT,EMAILTO, attach files ... final List<ResolveInfo> matches = pm.queryIntentActivities(sendMailIntent, 0); ResolveInfo sendingProgramm = null; for (final ResolveInfo info : matches) { if (info.activityInfo.packageName.equals(clickedResolveInfo.activityInfo.packageName)) { sendingProgramm = info; sendMailIntent .setClassName(sendingProgramm.activityInfo.packageName, sendingProgramm.activityInfo.name); break; } } startActivity(sendMailIntent); 

也许它会帮助你。