Android-使用选择器对话框使用动态文本字段进行共享
如果用户选择Twitter,我想发送一个缩写文本字段(由于字符限制)。从这篇文章中,我学到了我可以实现目标意图。然而,当我使用下面的代码时,许多应用程序显示为“Android系统”,Twitter不会显示在对话框中。我甚至删除了试图捕捉Twitter的if块,但它仍然没有出现Android-使用选择器对话框使用动态文本字段进行共享,android,twitter,share,android-sharing,socialshare,Android,Twitter,Share,Android Sharing,Socialshare,如果用户选择Twitter,我想发送一个缩写文本字段(由于字符限制)。从这篇文章中,我学到了我可以实现目标意图。然而,当我使用下面的代码时,许多应用程序显示为“Android系统”,Twitter不会显示在对话框中。我甚至删除了试图捕捉Twitter的if块,但它仍然没有出现 List<Intent> targetedShareIntents = new ArrayList<Intent>(); Intent sharingIntent = new Int
List<Intent> targetedShareIntents = new ArrayList<Intent>();
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
PackageManager pm = rootView.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0);
for(final ResolveInfo app : activityList){
String packageName = app.activityInfo.packageName;
Intent targetedShareIntent = new Intent(Intent.ACTION_SEND);
targetedShareIntent.setType("text/plain");
if(TextUtils.equals(packageName, TWITTER_PACKAGE_NAME)){
targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data, "Twitter"));
} else {
targetedShareIntent.putExtra(Intent.EXTRA_SUBJECT, data.getTitle());
targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data));
}
targetedShareIntent.setPackage(packageName);
targetedShareIntents.add(targetedShareIntent);
}
Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(targetedShareIntents.size() - 1), "Share this story");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
startActivity(chooserIntent);
在SO post中,使用了
targetedShareContents.remove(0)
,尽管targetedShareContents.remove(targetedShareContents.size()-1)
是一个更可重用的解决方案。非常感谢您对此提供的任何帮助或解释 我认为TextUtils.equals(packageName,TWITTER\u PACKAGE\u NAME)
找不到确切的com.TWITTER.android
包名,所以您需要在下面的代码中尝试匹配TWITTER包名
if(packageName.toLowerCase().startsWith("com.twitter")){
targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data, "Twitter"));
} else {
targetedShareIntent.putExtra(Intent.EXTRA_SUBJECT, data.getTitle());
targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data));
}
TWITTER\u PACKAGE\u NAME的值是多少?
最后一个字符串TWITTER\u PACKAGE\u NAME=“com.TWITTER.android”代码>不幸的是,这不是问题所在。它正在查找Twitter包(我设置了一个断点),实际上我也尝试了该代码。
if(packageName.toLowerCase().startsWith("com.twitter")){
targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data, "Twitter"));
} else {
targetedShareIntent.putExtra(Intent.EXTRA_SUBJECT, data.getTitle());
targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data));
}