如何在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);
也许它会帮助你。