2016-07-13 4 views
3

나는 내 응용 프로그램 선택기에서 페이스 북의 응용 프로그램을 제외하려면 다음 코드를 사용했다 : 나는 코드를 사용하는 경우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); 
    } 

페이스 북 응용 프로그램은 제거되었습니다. 하지만 슬픈 부분은 심지어 트위터 애플 리케이션도 애플 리케이션 선택기에서 제거되었고 "안드로이드 시스템"과 같은 다른 불필요한 애플 리케이션은 선택기에 나열되었습니다. 어떻게해야합니까? 이 코드가 없거나 잘못 되었습니까?

+0

나머지 당신이 Facebook 및 Twitter SDK @ mrnobody를 사용해야합니다. facebook과 twitter에서 데이터를 공유하고 싶다면 – YUVRAJ

+0

@ muruga5000 예 페이스 북 SDK를 사용했기 때문에 Send Intent의 앱 선택기에서 배제하고 싶습니다. 그러나 내가 이것을하는 동안, 트위터도 표시되지 않습니다. 트위터에 별도의 공유가 필요하지 않으므로 앱 선택기에 넣고 싶습니다. – mrnobody

+0

@mrnobody 고유 한 공유 인 텐트에서만 facebook 만 제외 하시겠습니까? –

답변

5

내 대답을 확인하십시오. 그것은 페이스 북 응용 프로그램 만 공유에서 제외됩니다.

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"); 
관련 문제