2015-10-14 29 views
0

如果用户选择Twitter,我想发送缩写文本字段(由于字符限制)。从这个SO后 - Branching the Android Share Intent extras depending on which method they choose to share - 我了解到我可以实现有针对性的意图。但是,当我使用下面的代码时,许多应用程序显示为“Android系统”,Twitter并未显示在对话框中。我甚至删除了试图抓住Twitter的if区块,但它仍然没有出现。Android - 使用动态文本字段使用选择器对话框共享

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); 

我真的不知道发生了什么事情有以下几点:

Intent.createChooser(targetedShareIntents.remove(targetedShareIntents.size() - 1), "Share this story"); 
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{})); 

在SO后,使用targetedShareIntents.remove(0)虽然targetedShareIntents.remove(targetedShareIntents.size() - 1)提议作为一种更重用的解决方案。任何帮助或解释这是非常感谢。

+0

是什么'TWITTER_PACKAGE_NAME'的价值? – pRaNaY

+0

'final String TWITTER_PACKAGE_NAME =“com.twitter.android”;' –

回答

0

我觉得TextUtils.equals(packageName, TWITTER_PACKAGE_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)); 
    } 
+0

不幸的是,这不是问题所在。它找到了Twitter包(我设置了一个断点),并且我实际上也尝试了该代码。 –

相关问题