title: Android Email intent with multiple attachments
body: <p>I'm working on an app where the user can fill out a report card and send it through the email client of choice (Gmail in my case). In addition to text, the user needs to be able to attach one or more images, but I can't seem to get it to work (full code attached further down).</p>
  
  <p>Below is the onActivityResult which attaches the images to the view and puts their Uris in "userSelectedImageUriList". This seems to work.</p>
  
  <pre><code>@Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if(requestCode==REQUEST_CODE_BROWSE_PICTURE)
      {
          if(resultCode==RESULT_OK)
          {
              // Get return image uri. If select the image from camera the uri like file:///storage/41B7-12F1/DCIM/Camera/IMG_20180211_095139.jpg
              // If select the image from gallery the uri like content://media/external/images/media/1316970.
              Uri fileUri = data.getData();
  
              // Save user choose image file uri in list.
              if(userSelectedImageUriList == null)
              {
                  userSelectedImageUriList = new ArrayList&lt;Uri&gt;();
              }
              userSelectedImageUriList.add(fileUri);
  
              // Create content resolver.
              ContentResolver contentResolver = getContentResolver();
  
              try {
                  // Open the file input stream by the uri.
                  InputStream inputStream = contentResolver.openInputStream(fileUri);
  
                  // Get the bitmap.
                  Bitmap imgBitmap = BitmapFactory.decodeStream(inputStream);
  
                  ImageView imageview = new ImageView(ReportCard.this);
                  LinearLayout linearLayout = (LinearLayout)findViewById(R.id.imageHolderLayout);
                  LinearLayout.LayoutParams params = new LinearLayout
                          .LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
  
                  // Add image path from drawable folder.
                  imageview.setImageBitmap(imgBitmap);
                  imageview.setLayoutParams(params);
                  linearLayout.addView(imageview);
  
                  inputStream.close();
              }catch(FileNotFoundException ex)
              {
                  Log.e(TAG_BROWSE_PICTURE, ex.getMessage(), ex);
              }catch(IOException ex)
              {
                  Log.e(TAG_BROWSE_PICTURE, ex.getMessage(), ex);
              }
          }
      }
  }
  </code></pre>
  
  <p>Next, when the user clicks the send button I create the email intent.</p>
  
  <pre><code>public void sendReport(Context context) {
      EditText nameField = (EditText)findViewById(R.id.EditTextName);
      EditText emailField = (EditText)findViewById(R.id.EditTextEmail);
      EditText locationField = (EditText)findViewById(R.id.EditTextLocation);
      EditText dateField = (EditText)findViewById(R.id.EditTextDate);
      EditText bodyField = (EditText)findViewById(R.id.EditTextBody);
  
      if(!nameField.getText().toString().matches("") &amp;&amp; !emailField.getText().toString().matches("") &amp;&amp; !locationField.getText().toString().matches("") &amp;&amp; !dateField.getText().toString().matches("") &amp;&amp; !bodyField.getText().toString().matches("")) {
          PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putString("report_email", emailField.getText().toString()).commit();
          PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putString("report_name", nameField.getText().toString()).commit();
  
          String emailBody = "Name: "+nameField.getText()+"\n\n";
          emailBody += "Location: "+locationField.getText()+"\n\n";
          emailBody += "Time: "+dateField.getText()+"\n\n";
          emailBody += "Description: "+bodyField.getText();
  
          Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
  
          // set the type to 'email'
          emailIntent.setType("text/plain");
          String to[] = {emailField.getText().toString()};
          emailIntent.putExtra(Intent.EXTRA_EMAIL, to);
  
          // the attachment
          emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, userSelectedImageUriList);
  
          // the mail
          emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Report");
          emailIntent.putExtra(Intent.EXTRA_TEXT, emailBody);
  
          startActivity(Intent.createChooser(emailIntent , "Send using..."));
          finish();
      } else {
          Toast.makeText(this, getString(R.string.field_error), Toast.LENGTH_SHORT).show();
      }
  }
  </code></pre>
  
  <p>Now, this is where things stop working. The chooser is displayed but the images are not attached. Gmail opens but a toast is displayed with "Could not attach file".</p>
  
  <h2>Full code</h2>
  
  <p><strong>ReportCard.java</strong></p>
  
  <pre><code>package com.zaewin.reports;
  
  import android.Manifest;
  import android.app.Activity;
  import android.app.AlertDialog;
  import android.content.ContentResolver;
  import android.content.ContentValues;
  import android.content.Context;
  import android.content.DialogInterface;
  import android.content.Intent;
  import android.content.pm.PackageManager;
  import android.database.Cursor;
  import android.database.sqlite.SQLiteDatabase;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  import android.net.Uri;
  import android.os.Bundle;
  import android.preference.PreferenceManager;
  import android.support.annotation.NonNull;
  import android.support.v4.app.ActivityCompat;
  import android.support.v4.content.ContextCompat;
  import android.util.Log;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.view.View;
  import android.widget.Button;
  import android.widget.EditText;
  import android.widget.ImageView;
  import android.widget.LinearLayout;
  import android.widget.TextView;
  import android.widget.Toast;
  
  import java.io.File;
  import java.io.FileNotFoundException;
  import java.io.IOException;
  import java.io.InputStream;
  import java.text.SimpleDateFormat;
  import java.util.ArrayList;
  import java.util.Calendar;
  
  public class ReportCard extends Activity {
      long reportID;
      long newRowId;
      // Log tag that is used to distinguish log info.
      private final static String TAG_BROWSE_PICTURE = "BROWSE_PICTURE";
  
      // Used when request action Intent.ACTION_GET_CONTENT
      private final static int REQUEST_CODE_BROWSE_PICTURE = 1;
  
      // Used when request read external storage permission.
      private final static int REQUEST_PERMISSION_READ_EXTERNAL = 2;
  
      // Save user selected image uri list.
      private ArrayList&lt;Uri&gt; userSelectedImageUriList = null;
  
      // Currently displayed user selected image index in userSelectedImageUriList.
      private int currentDisplayedUserSelectImageIndex = 0;
  
      @Override
      public void onBackPressed() {
          saveReport(ReportCard.this);
          finish();
      }
  
      // create an action bar button
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          getMenuInflater().inflate(R.menu.reportmenu, menu);
          return super.onCreateOptionsMenu(menu);
      }
  
      // handle button activities
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
              case R.id.deleteButton:
                  new AlertDialog.Builder(this)
                      .setTitle(R.string.delete)
                      .setMessage(R.string.delete_prompt)
                      .setIcon(android.R.drawable.ic_dialog_alert)
                      .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog, int whichButton) {
                              Bundle bundle = getIntent().getExtras();
                              Boolean deletestatus = deleteReport(getApplicationContext(), bundle.getInt("reportID"));
  
                              if(deletestatus == true) {
                                  CharSequence text = getString(R.string.delete_success);
                                  Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
                                  toast.show();
                                  finish();
                              } else {
                                  CharSequence text = getString(R.string.delete_fail);
                                  Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
                                  toast.show();
                              }
                          }})
                      .setNegativeButton(android.R.string.no, null).show();
                  return true;
  
              case R.id.saveButton:
                  saveReport(getApplicationContext());
                  return true;
  
              case R.id.sendButton:
                  sendReport(getApplicationContext());
                  return true;
  
              default:
                  // If we got here, the user's action was not recognized.
                  // Invoke the superclass to handle it.
                  return super.onOptionsItemSelected(item);
  
          }
      }
  
      @Override
      public void onCreate(Bundle icicle) {
          super.onCreate(icicle);
          setContentView(R.layout.report_view);
          setTitle(R.string.report_card);
  
          Bundle bundle = getIntent().getExtras();
          if(bundle != null) {
              reportID = bundle.getInt("reportID");
              loadReport(reportID);
          } else {
              setDefaults();
          }
  
          final Button button = (Button) findViewById(R.id.buttonAddPicture);
          button.setOnClickListener(new View.OnClickListener() {
              public void onClick(View v) {
                  // Because camera app returned uri value is something like file:///storage/41B7-12F1/DCIM/Camera/IMG_20180211_095139.jpg
                  // So if show the camera image in image view, this app require below permission.
                  int readExternalStoragePermission = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE);
                  if(readExternalStoragePermission != PackageManager.PERMISSION_GRANTED)
                  {
                      String requirePermission[] = {Manifest.permission.READ_EXTERNAL_STORAGE};
                      ActivityCompat.requestPermissions(ReportCard.this, requirePermission, REQUEST_PERMISSION_READ_EXTERNAL);
                  }else {
                      openPictureGallery();
                  }
              }
          });
      }
  
      /* Invoke android os system file browser to select images. */
      private void openPictureGallery()
      {
          // Create an intent.
          Intent openAlbumIntent = new Intent();
  
          // Only show images in the content chooser.
          // If you want to select all type data then openAlbumIntent.setType("*/*");
          // Must set type for the intent, otherwise there will throw android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.GET_CONTENT }
          openAlbumIntent.setType("image/*");
  
          // Set action, this action will invoke android os browse content app.
          openAlbumIntent.setAction(Intent.ACTION_GET_CONTENT);
  
          // Start the activity.
          startActivityForResult(openAlbumIntent, REQUEST_CODE_BROWSE_PICTURE);
      }
  
      /* When the action Intent.ACTION_GET_CONTENT invoked app return, this method will be executed. */
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          if(requestCode==REQUEST_CODE_BROWSE_PICTURE)
          {
              if(resultCode==RESULT_OK)
              {
                  // Get return image uri. If select the image from camera the uri like file:///storage/41B7-12F1/DCIM/Camera/IMG_20180211_095139.jpg
                  // If select the image from gallery the uri like content://media/external/images/media/1316970.
                  Uri fileUri = data.getData();
  
                  // Save user choose image file uri in list.
                  if(userSelectedImageUriList == null)
                  {
                      userSelectedImageUriList = new ArrayList&lt;Uri&gt;();
                  }
                  userSelectedImageUriList.add(fileUri);
  
                  // Create content resolver.
                  ContentResolver contentResolver = getContentResolver();
  
                  try {
                      // Open the file input stream by the uri.
                      InputStream inputStream = contentResolver.openInputStream(fileUri);
  
                      // Get the bitmap.
                      Bitmap imgBitmap = BitmapFactory.decodeStream(inputStream);
  
                      ImageView imageview = new ImageView(ReportCard.this);
                      LinearLayout linearLayout = (LinearLayout)findViewById(R.id.imageHolderLayout);
                      LinearLayout.LayoutParams params = new LinearLayout
                              .LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
  
                      // Add image path from drawable folder.
                      imageview.setImageBitmap(imgBitmap);
                      imageview.setLayoutParams(params);
                      linearLayout.addView(imageview);
  
                      inputStream.close();
                  }catch(FileNotFoundException ex)
                  {
                      Log.e(TAG_BROWSE_PICTURE, ex.getMessage(), ex);
                  }catch(IOException ex)
                  {
                      Log.e(TAG_BROWSE_PICTURE, ex.getMessage(), ex);
                  }
              }
          }
      }
  
      /* After user choose grant read external storage permission or not. */
      @Override
      public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
          if(requestCode==REQUEST_PERMISSION_READ_EXTERNAL)
          {
              if(grantResults.length &gt; 0)
              {
                  int grantResult = grantResults[0];
                  if(grantResult == PackageManager.PERMISSION_GRANTED)
                  {
                      // If user grant the permission then open choose image popup dialog.
                      openPictureGallery();
                  }else
                  {
                      Toast.makeText(getApplicationContext(), "You denied read external storage permission.", Toast.LENGTH_LONG).show();
                  }
              }
          }
      }
  
      public void setDefaults()  {
          EditText emailField = (EditText)findViewById(R.id.EditTextEmail);
          emailField.setText(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getString("report_email", ""), TextView.BufferType.EDITABLE);
  
          EditText nameField = (EditText)findViewById(R.id.EditTextName);
          nameField.setText(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getString("report_name", ""), TextView.BufferType.EDITABLE);
  
          Calendar c = Calendar.getInstance();
          SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
          String formattedDate = df.format(c.getTime());
  
          EditText dateField = (EditText)findViewById(R.id.EditTextDate);
          dateField.setText(formattedDate, TextView.BufferType.EDITABLE);
      }
  
      public void loadReport(long reportID) {
          ReportDbHelper mDbHelper = new ReportDbHelper(getBaseContext());
          SQLiteDatabase db = mDbHelper.getReadableDatabase();
  
          // Define a projection that specifies which columns from the database
          // you will actually use after this query.
          String[] projection = {
                  ReportContract.ReportEntry._ID,
                  ReportContract.ReportEntry.COLUMN_NAME,
                  ReportContract.ReportEntry.COLUMN_EMAIL,
                  ReportContract.ReportEntry.COLUMN_LOCATION,
                  ReportContract.ReportEntry.COLUMN_DATE,
                  ReportContract.ReportEntry.COLUMN_BODY
          };
  
          // Filter results WHERE "title" = 'My Title'
          String selection = ReportContract.ReportEntry._ID + " = ?";
          String[] selectionArgs = { Long.toString(reportID) };
  
          // How you want the results sorted in the resulting Cursor
          String sortOrder = ReportContract.ReportEntry.COLUMN_NAME + " DESC";
  
          Cursor cursor = db.query(
                  ReportContract.ReportEntry.TABLE_NAME,                     // The table to query
                  projection,                               // The columns to return
                  selection,                                // The columns for the WHERE clause
                  selectionArgs,                            // The values for the WHERE clause
                  null,                                     // don't group the rows
                  null,                                     // don't filter by row groups
                  sortOrder                                 // The sort order
          );
  
  
          //List itemIds = new ArrayList&lt;&gt;();
          while(cursor.moveToNext()) {
              EditText emailField = (EditText)findViewById(R.id.EditTextEmail);
              emailField.setText(cursor.getString(cursor.getColumnIndexOrThrow(ReportContract.ReportEntry.COLUMN_EMAIL)), TextView.BufferType.EDITABLE);
  
              EditText nameField = (EditText)findViewById(R.id.EditTextName);
              nameField.setText(cursor.getString(cursor.getColumnIndexOrThrow(ReportContract.ReportEntry.COLUMN_NAME)), TextView.BufferType.EDITABLE);
  
              EditText dateField = (EditText)findViewById(R.id.EditTextDate);
              dateField.setText(cursor.getString(cursor.getColumnIndexOrThrow(ReportContract.ReportEntry.COLUMN_DATE)), TextView.BufferType.EDITABLE);
  
              EditText locationField = (EditText)findViewById(R.id.EditTextLocation);
              locationField.setText(cursor.getString(cursor.getColumnIndexOrThrow(ReportContract.ReportEntry.COLUMN_LOCATION)), TextView.BufferType.EDITABLE);
  
              EditText bodyField = (EditText)findViewById(R.id.EditTextBody);
              bodyField.setText(cursor.getString(cursor.getColumnIndexOrThrow(ReportContract.ReportEntry.COLUMN_BODY)), TextView.BufferType.EDITABLE);
          }
          cursor.close();
          db.close();
      }
  
      public long saveReport(Context context) {
          EditText nameField = (EditText)findViewById(R.id.EditTextName);
          EditText emailField = (EditText)findViewById(R.id.EditTextEmail);
          EditText locationField = (EditText)findViewById(R.id.EditTextLocation);
          EditText dateField = (EditText)findViewById(R.id.EditTextDate);
          EditText bodyField = (EditText)findViewById(R.id.EditTextBody);
  
          ReportDbHelper mDbHelper = new ReportDbHelper(context);
          SQLiteDatabase db = mDbHelper.getWritableDatabase();
  
          // Create a new map of values, where column names are the keys
          ContentValues values = new ContentValues();
          values.put(ReportContract.ReportEntry.COLUMN_NAME, nameField.getText().toString());
          values.put(ReportContract.ReportEntry.COLUMN_EMAIL, emailField.getText().toString());
          values.put(ReportContract.ReportEntry.COLUMN_LOCATION, locationField.getText().toString());
          values.put(ReportContract.ReportEntry.COLUMN_DATE, dateField.getText().toString());
          values.put(ReportContract.ReportEntry.COLUMN_BODY, bodyField.getText().toString());
  
          CharSequence text;
          try {
              if(reportID == 0) {
                  newRowId = db.insert(ReportContract.ReportEntry.TABLE_NAME, null, values);
                  text = getString(R.string.save_success);
              } else {
                  String where = ReportContract.ReportEntry._ID + " = ?";
                  String[] whereArgs = new String[]{String.valueOf(reportID)};
  
                  newRowId = db.update(ReportContract.ReportEntry.TABLE_NAME, values, where, whereArgs);
                  text = getString(R.string.update_success);
              }
              Toast toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
              toast.show();
              //finish();
          } catch(android.database.sqlite.SQLiteException ex) {
              text = getString(R.string.save_error);
              Toast toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
              toast.show();
          }
          db.close();
  
          return newRowId;
      }
  
      public boolean deleteReport(Context context, Integer reportID) {
          ReportDbHelper mDbHelper = new ReportDbHelper(context);
          SQLiteDatabase db = mDbHelper.getWritableDatabase();
          Boolean status = db.delete(ReportContract.ReportEntry.TABLE_NAME, ReportContract.ReportEntry._ID + "=" + reportID, null) &gt; 0;
          db.close();
          return status;
      }
  
      public void sendReport(Context context) {
          EditText nameField = (EditText)findViewById(R.id.EditTextName);
          EditText emailField = (EditText)findViewById(R.id.EditTextEmail);
          EditText locationField = (EditText)findViewById(R.id.EditTextLocation);
          EditText dateField = (EditText)findViewById(R.id.EditTextDate);
          EditText bodyField = (EditText)findViewById(R.id.EditTextBody);
  
          if(!nameField.getText().toString().matches("") &amp;&amp; !emailField.getText().toString().matches("") &amp;&amp; !locationField.getText().toString().matches("") &amp;&amp; !dateField.getText().toString().matches("") &amp;&amp; !bodyField.getText().toString().matches("")) {
              PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putString("report_email", emailField.getText().toString()).commit();
              PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putString("report_name", nameField.getText().toString()).commit();
  
              String emailBody = "Ditt namn: "+nameField.getText()+"\n\n";
              emailBody += "Plats: "+locationField.getText()+"\n\n";
              emailBody += "Tidpunkt: "+dateField.getText()+"\n\n";
              emailBody += "Beskrivning: "+bodyField.getText();
  
              Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
  
              ArrayList&lt;Uri&gt; uris = new ArrayList&lt;Uri&gt;();
              for (Uri file : userSelectedImageUriList)
              {
                  File fileIn = new File(file.toString());
                  fileIn.setReadable(true, false);
                  Uri u = Uri.fromFile(fileIn);
                  uris.add(u);
              }
  
              // set the type to 'email'
              emailIntent.setType("text/plain");
              String to[] = {emailField.getText().toString()};
              emailIntent.putExtra(Intent.EXTRA_EMAIL, to);
  
              // the attachment
              emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
  
              // the mail
              emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Rapport från Hamnarbetarappen");
              emailIntent.putExtra(Intent.EXTRA_TEXT, emailBody);
  
              startActivity(Intent.createChooser(emailIntent , "Skicka med..."));
              finish();
          } else {
              Toast.makeText(this, getString(R.string.field_error), Toast.LENGTH_SHORT).show();
          }
      }
  }
  </code></pre>
  
  <p><strong>report_view.xml</strong></p>
  
  <pre><code>&lt;ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ScrollView01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scrollbars="vertical"&gt;
      &lt;LinearLayout
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:orientation="vertical"
          android:layout_marginLeft="5dp"
          android:layout_marginRight="5dp"&gt;        
          &lt;EditText
              android:id="@+id/EditTextName"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:hint="@string/report_name"
              android:inputType="textPersonName" &gt;
          &lt;/EditText&gt;
          &lt;EditText
              android:id="@+id/EditTextEmail"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:hint="@string/report_email"
              android:inputType="textEmailAddress" &gt;
          &lt;/EditText&gt;
          &lt;EditText
              android:id="@+id/EditTextLocation"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:hint="@string/report_location" &gt;
          &lt;/EditText&gt;
          &lt;EditText
              android:id="@+id/EditTextDate"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:hint="@string/report_date"
              android:inputType="datetime" &gt;
          &lt;/EditText&gt;
          &lt;EditText
              android:id="@+id/EditTextBody"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:hint="@string/report_description"
              android:inputType="textMultiLine"
              android:lines="5" &gt;
          &lt;/EditText&gt;        
          &lt;LinearLayout
          android:id="@+id/relativeLayout1"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:orientation="horizontal"
          android:layout_marginBottom="5dp"&gt;
              &lt;Button
                  android:id="@+id/buttonAddPicture"
                  android:layout_width="0dp"
                  android:layout_height="wrap_content"
                  android:layout_weight="1"
                  android:background="@drawable/blue_button"
                  android:drawableRight="@drawable/ic_action_camera"
                  android:padding="10dp"
                  android:text="@string/report_takepicture"
                  android:textAlignment="center"
                  android:textColor="@color/actionbar_text" /&gt;
         &lt;/LinearLayout&gt;
      &lt;LinearLayout
          android:id="@+id/imageHolderLayout"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:orientation="vertical"
          android:layout_marginBottom="5dp"&gt;
      &lt;/LinearLayout&gt;
  &lt;/ScrollView&gt;
  </code></pre>
  
  <p><strong>AndroidManifest.xml</strong></p>
  
  <pre><code>&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zaewin.reports" android:versionCode="1" android:versionName="1.0"&gt;
      &lt;uses-sdk android:minSdkVersion="14" android:targetSdkVersion="22" /&gt;
      &lt;uses-feature android:name="android.hardware.camera" android:required="true" /&gt;
      &lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:required="true" /&gt;
      &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:required="true" /&gt;
      &lt;uses-permission android:name="android.permission.INTERNET" android:required="true"/&gt;
  
      &lt;application android:theme="@style/CustomActionBarTheme" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:allowBackup="true"&gt;        
          &lt;activity android:label="ReportCard" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" android:name=".ReportCard"&gt;
              &lt;meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".ReportList" /&gt;
              &lt;intent-filter&gt;
                  &lt;action android:name="android.intent.action.MAIN" /&gt;
                  &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
                  &lt;action android:name="android.intent.action.SEND_MULTIPLE" /&gt;
                  &lt;category android:name="android.intent.category.DEFAULT" /&gt;
                  &lt;data android:mimeType="image/*" /&gt;
              &lt;/intent-filter&gt;
          &lt;/activity&gt;        
      &lt;/application&gt;
  &lt;/manifest&gt;
  </code></pre>