2015-10-14 30 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包(我設置了一個斷點),並且我實際上也嘗試了該代碼。 –

相關問題