2015-03-08 2 views
1

У меня есть текст в моем андроиде деятельности, и я хочу дать возможность пользователя поделиться в социальных приложениях, как WhatsApp, линия, facebook, Twitter и т.д.Создания пользовательских Chooser для акций умысла по имени пакета

Но я хочу для создания пользовательского выбора, чтобы он не показывал непредвиденные приложения в выборе.

Я знаю этого сниппета

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); 
shareIntent.setType("text/plain"); 
startActivity(Intent.createChooser(shareIntent, "Share via")); 

Как я могу сделать это так, чтобы в Chooser было бы показывать только приложения, которые я могу указать их имена пакетов.

Благодаря

+0

Кажется, это не представляется возможным: http://stackoverflow.com/questions/5734678/custom-filtering-of-intent-chooser-based-on-installed-android-package-name –

ответ

0

Хотя я думаю, этот вопрос дублируется, но так как я не могу найти дублированный вопрос еще, позвольте мне дать ответ первым.

List<Intent> targetedShareIntents = new ArrayList<Intent>(); 
Intent shareInent = new Intent(Intent.ACTION_SEND); 
shareInent.setType("text/plain"); 
List<ResolveInfo> resInfo = activity.getPackageManager().queryIntentActivities(shareInent, 0); 
// put the name of the packages you want in this ArrayList 
ArrayList<String> wantedPackage = new ArrayList<>(); 

if (!resInfo.isEmpty()) { 
    for (ResolveInfo info : resInfo) { 
     Intent targetedShare = new Intent(android.content.Intent.ACTION_SEND); 
     targetedShare.setType("text/plain"); 
     String infoPackageName = info.activityInfo.packageName.toLowerCase(); 

     if (wantedPackage.contains(infoPackageName)) { 
      targetedShare.putExtra(Intent.EXTRA_TEXT, "put your text here"); 
      targetedShare.setPackage(info.activityInfo.packageName.toLowerCase()); 
      targetedShareIntents.add(targetedShare); 
      resPackageNames.add(infoPackageName); 
     } 
    } 
    Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Chooser title"); 
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{})); 
    startActivity(chooserIntent); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^