2016-07-13 24 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 system」のような他の不要なアプリもチューザーに掲載されました。私は何をすべきか ?このコードに何か不足しているか間違っていますか?

+0

FacebookやTwitter、残りを除きFacebookやTwitter SDK @ mrnobody – YUVRAJ

+0

@ muruga5000はい私はフェイスブックSDKを使用しているので、私は送信インテントのアプリチューザで除外したいと思っています。しかし、私はこれを行う間、ツイッターは表示されません。私は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"); 
関連する問題