2016-07-13 46 views
3

我用下面的代碼,以我的應用程序選擇器排除的Facebook應用程序:當我使用的代碼移除如何從ACTION_SEND中排除特定應用程序意圖?

List<Intent> targetedShareIntents = new ArrayList<Intent>(); 
    Intent intent = new Intent(android.content.Intent.ACTION_SEND); 
    intent.setType("image/*"); 
    List<ResolveInfo> resInfo = getActivity().getPackageManager().queryIntentActivities(intent, 0); 
    if (!resInfo.isEmpty()) { 
     for (ResolveInfo resolveInfo : resInfo) { 
      String packageName = resolveInfo.activityInfo.packageName; 
      Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND); 
      targetedShareIntent.setType("image/*"); 
      targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "tooter.nl"); 
      if (!TextUtils.equals(packageName, "com.facebook.katana")) { 


       targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, st); 
       targetedShareIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri); 
       targetedShareIntent.setPackage(packageName); 
       targetedShareIntents.add(targetedShareIntent); 
      } 

     } 
     Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share"); 
     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[targetedShareIntents.size()])); 
     startActivity(chooserIntent); 
    } 

的Facebook應用程序。但可悲的是,即使Twitter應用程序也從應用程序選擇器中刪除,其他不必要的應用程序(如「Android系統」)也被選中。我該怎麼辦 ?這段代碼是缺少的還是錯的?

+0

除了Facebook和Twitter剩餘只顯示,,如果你想在臉書和Twitter的共享數據,你應該使用Facebook和Twitter的SDK @ mrnobody – YUVRAJ

+0

@ muruga5000是的,我已經使用了facebook sdk,因爲我想排除它在我的發送意圖的應用程序選擇器。但是,當我這樣做,Twitter也沒有顯示。我不需要一個單獨的份額的Twitter,所以我想在應用程序選擇器 – mrnobody

+0

@mrnobody你想排除只有本地分享意圖正確的Facebook嗎? –

回答

5

查看下面的答案。它將僅排除來自共享的Facebook應用程序。

void shareOnOtherSocialMedia() { 

    List<Intent> shareIntentsLists = new ArrayList<Intent>(); 
    Intent shareIntent = new Intent(); 
    shareIntent.setAction(Intent.ACTION_SEND); 
    shareIntent.setType("image/*"); 
    List<ResolveInfo> resInfos = getPackageManager().queryIntentActivities(shareIntent, 0); 
    if (!resInfos.isEmpty()) { 
     for (ResolveInfo resInfo : resInfos) { 
     String packageName = resInfo.activityInfo.packageName; 
     if (!packageName.toLowerCase().contains("facebook")) { 
      Intent intent = new Intent(); 
      intent.setComponent(new ComponentName(packageName, resInfo.activityInfo.name)); 
      intent.setAction(Intent.ACTION_SEND); 
      intent.setType("image/*"); 
      intent.setPackage(packageName); 
      shareIntentsLists.add(intent); 
     } 
     } 
     if (!shareIntentsLists.isEmpty()) { 
     Intent chooserIntent = Intent.createChooser(shareIntentsLists.remove(0), "Choose app to share"); 
     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, shareIntentsLists.toArray(new Parcelable[]{})); 
     startActivity(chooserIntent); 
     } else 
     Log.e("Error", "No Apps can perform your task"); 

    } 
    } 
} 

並且在需要的地方調用上述函數。 讓我知道的查詢。

+0

是這個工程。謝了哥們 ! – mrnobody

+0

很好..快樂編碼.. :) –

0

感謝Ragu Swaminathan的回答,它完美地排除了IntentChooser中的特定應用程序。然而,由於「shareIntentLists」中的「chooserIntent」前面加,可如果列表的大小不是4的倍數爲了解決這種情況發生了一些空的空間,嘗試:

Intent chooserIntent = Intent.createChooser(new Intent(), "Choose app to share"); 
相關問題