2015-03-08 51 views
1

我在我的Android活动文本,我想给用户选择对社交应用例如WhatsApp,线,Facebook,微博等的份额意图创建自定义选择器通过包名

但我想分享创建自定义选择器,以便它不会在选择器中显示意外的应用程序。

我知道这个片段

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

我怎样才能让这个在选配它会只显示我可以通过自己的包名指定的应用程序。

感谢

+0

看来,这是不可能的: http://stackoverflow.com/questions/5734678/custom-filtering-of-intent-chooser-based-on-installed-android-package-name – 2015-03-08 21:14:56

回答

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); 
}