Search code examples
androidandroid-intentandroid-implicit-intent

Show only specific options when doing Implicit Intent


Sorry if the question is already asked, I searched a lot but couldn't find it.

My doubt is when I am doing implicit intent for sharing image/test it shows me various options like WhatsApp, Facebook, Message etc. However I only want to show 2 options e.g. Whatsapp and Message.

For WhatsApp I know the package but I do not know for the Message app in mobile.

So,

  1. Is there a default package name for message app?
  2. how to include 2 packages in the implicit intent?

Thanks in advance


Solution

  • Answer of Q1:

    Use this method for finding the default package.

    public static String getDefaultSmsAppPackageName(Context context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
            return Telephony.Sms.getDefaultSmsPackage(context);
        else {
            Intent intent = new Intent(Intent.ACTION_VIEW)
                    .addCategory(Intent.CATEGORY_DEFAULT).setType("vnd.android-dir/mms-sms");
            final List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentActivities(intent, 0);
            if (resolveInfos != null && !resolveInfos.isEmpty())
                return resolveInfos.get(0).activityInfo.packageName;
            return null;
        }
    }
    

    Answer of Q2:

     List<Intent> targetedShareIntents = new ArrayList<Intent>();
                    Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
                    shareIntent.setType("text/plain");
                    List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(shareIntent, 0);
                    if (!resInfo.isEmpty()) {
                        for (ResolveInfo resolveInfo : resInfo) {
                            String packageName = resolveInfo.activityInfo.packageName;
                            Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND);
                            targetedShareIntent.setType("text/plain");
                            targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "text message to shared");
                            targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "subject to be shared");
                            if (packageName.contains(getDefaultSmsAppPackageName(context))||packageName.contains("com.whatsapp")) {
                                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);