Customize Android Intent.ACTION_SEND

I’m using Intent for sharing url and subject. In this intent filter showing all the sharing apps. i want only (facebook/gmail/message/skype/twitter) these option in popup. is this possible to customize sharing intent filter.

 Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
 sharingIntent.setType("text/plain");
 String shareBody = adapter.getDetails("url";
 sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"subject");
 sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
 startActivity(Intent.createChooser(sharingIntent, "Share via"));

thanks

  • Double checked locking in Android
  • What is the benefit of ViewHolder?
  • Usage of sendBroadcast()
  • Android Studio can't find library classes after Gradle build
  • Feature discovery animations for Android
  • Permanently hide Android Status Bar
  • Android MediaPlayer takes long time to prepare and buffer
  • Saving to SD card as text file
  • How to auto-adjust text size on a multi-line TextView according to the view max dimensions?
  • android maps auto-rotate
  • Possible to inflate an XML layout in a Service? (Android)
  • Android app crashes with SIGABRT Signal 6 only while Eclipse debugging
  • 4 Solutions collect form web for “Customize Android Intent.ACTION_SEND”

    Yes, its possible Check out below which shows the filteration for Facebook,Gmail,Twitter.

    Updated to Share Text + Image:

    Select the image from the SDCard:

    String fileName = "image-3116.jpg";
    String externalStorageDirectory = Environment.getExternalStorageDirectory().toString();
    String myDir = externalStorageDirectory + "/saved_images/"; // the
                // file will be in saved_images
    Uri uri = Uri.parse("file:///" + myDir + fileName);
    

    Share via Twitter

      Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
       shareIntent.setType("text/plain");
       shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, (String) v.getTag(R.string.app_name));
       shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String) v.getTag(R.drawable.ic_launcher));
        shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
    
       PackageManager pm = v.getContext().getPackageManager();
       List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
         for (final ResolveInfo app : activityList) 
          {
            if ("com.twitter.android.PostActivity".equals(app.activityInfo.name))
              {
                 final ActivityInfo activity = app.activityInfo;
                 final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
                 shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
                 shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                 shareIntent.setComponent(name);
                 v.getContext().startActivity(shareIntent);
                break;
              }
            }
    

    Share via Facebook

       Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
       shareIntent.setType("text/plain");
       shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, (String) v.getTag(R.string.app_name));
       shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String) v.getTag(R.drawable.ic_launcher));
       shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
    
       PackageManager pm = v.getContext().getPackageManager();
       List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
         for (final ResolveInfo app : activityList) 
         {
             if ((app.activityInfo.name).startsWith("com.facebook.katana")) 
             {
               final ActivityInfo activity = app.activityInfo;
               final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
              shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
              shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
              shareIntent.setComponent(name);
              v.getContext().startActivity(shareIntent);
              break;
            }
          }
    

    Share via Gmail

      Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
      shareIntent.setType("text/plain");
      shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, (String) v.getTag(R.string.app_name));
      shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String) v.getTag(R.drawable.ic_launcher));
        shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
    
       PackageManager pm = v.getContext().getPackageManager();
       List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
           for (final ResolveInfo app : activityList) 
            {
              if ((app.activityInfo.name).contains("android.gm")) 
               {
                 final ActivityInfo activity = app.activityInfo;
                 final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
                shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
                shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                 shareIntent.setComponent(name);
                 v.getContext().startActivity(shareIntent);
                 break;
               }
           }
    

    Share via WhatsApp:

     Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
    shareIntent.setType("text/html");
    shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, (String) v.getTag(R.string.app_name));
     shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String) v.getTag(R.drawable.ic_launcher));
    shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
    
    PackageManager pm = v.getContext().getPackageManager();
    List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
            for (final ResolveInfo app : activityList) {
                if ((app.activityInfo.name).contains("com.whatsapp")) {
                        final ActivityInfo activity = app.activityInfo;
                        final ComponentName name = new ComponentName(
                                    activity.applicationInfo.packageName, activity.name);
                              shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
                            shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                                    | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                            shareIntent.setComponent(name);
                            v.getContext().startActivity(shareIntent);
                            break;
                        }
                    }
    

    Single method for multiple functionalities

    Code of share(String nameApp,String imagePath,String message) function:

    public void share(String nameApp, String imagePath, String message) {
        try {
            List<Intent> targetedShareIntents = new ArrayList<Intent>();
            Intent share = new Intent(android.content.Intent.ACTION_SEND);
            share.setType("image/jpeg");
            List<ResolveInfo> resInfo = getPackageManager()
                    .queryIntentActivities(share, 0);
            if (!resInfo.isEmpty()) {
                for (ResolveInfo info : resInfo) {
                    Intent targetedShare = new Intent(
                            android.content.Intent.ACTION_SEND);
                    targetedShare.setType("image/jpeg"); // put here your mime
                                                            // type
                    if (info.activityInfo.packageName.toLowerCase().contains(
                            nameApp)
                            || info.activityInfo.name.toLowerCase().contains(
                                    nameApp)) {
                        targetedShare.putExtra(Intent.EXTRA_SUBJECT,
                                "Sample Photo");
                        targetedShare.putExtra(Intent.EXTRA_TEXT, message);
                        targetedShare.putExtra(Intent.EXTRA_STREAM,
                                Uri.fromFile(new File(imagePath)));
                        targetedShare.setPackage(info.activityInfo.packageName);
                        targetedShareIntents.add(targetedShare);
                    }
                }
                Intent chooserIntent = Intent.createChooser(
                        targetedShareIntents.remove(0), "Select app to share");
                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
                        targetedShareIntents.toArray(new Parcelable[] {}));
                startActivity(chooserIntent);
            }
        } catch (Exception e) {
            Log.v("VM",
                    "Exception while sending image on" + nameApp + " "
                            + e.getMessage());
        }
    }
    

    For attaching image on gmail, facebook, twitter with text use below code.

    File filePath = new File("your image path");
    share("gmail", filePath.toString(),"your comment");
    share("facebook", filePath.toString(),"your comment");
    share("twitter", filePath.toString(),"your comment");
    

    Above given answer open facebook chat app on my phone. For the following worked !!

    Intent sharingIntent = new Intent(Intent.ACTION_SEND);
                    sharingIntent.setType("text/plain");
                    sharingIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
                    sharingIntent.putExtra(Intent.EXTRA_TEXT, "Text...");
                    PackageManager packManager = getPackageManager();
                    List<ResolveInfo> resolvedInfoList = packManager.queryIntentActivities(sharingIntent,  PackageManager.MATCH_DEFAULT_ONLY);
    
                    boolean resolved = false;
                    for(ResolveInfo resolveInfo: resolvedInfoList){
                        if(resolveInfo.activityInfo.packageName.startsWith("com.facebook.katana")){
                            sharingIntent.setClassName(
                                resolveInfo.activityInfo.packageName, 
                                resolveInfo.activityInfo.name );
                            resolved = true;
                            break;
                        }
                    }
                    if(resolved){
                        startActivity(sharingIntent);
                    }else{
    
                         Builder alert  = new AlertDialog.Builder(ActivityName.this);
                            alert.setTitle("Warning");
                            alert.setMessage("Facebook App not found");
                            alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,int which) 
                                {
                                    dialog.dismiss();
    
                                }
                            });
                            alert.show();
                    } 
    

    You can’t share Extras with image without using facebook sdk.

    https://developers.facebook.com/x/bugs/332619626816423/

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.