title: send a image from gallery in email service in android
body: <p>I want to send images via email in my android app. For which I'm using Android Native Camera app and Intents to use the respective service. I've used the following code:<br>
  Email is getting send but if I'm trying to add image the app gets crash.</p>
  
  <pre><code>public class Complaints extends AppCompatActivity {
      Button sendEmail;
      EditText to, subject, msg;
      Bitmap image;
      Button camera;
      File pic;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_complaints);
          to = (EditText) findViewById(R.id.et1);
          subject = (EditText) findViewById(R.id.et2);
          msg = (EditText) findViewById(R.id.et3);
          sendEmail = (Button) findViewById(R.id.s_Email);
          camera = (Button) findViewById(R.id.btn_img);
          camera.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  Intent intent=new Intent();
                  intent.setType("image/*");
                  intent.setAction(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  
  startActivityForResult(Intent.createChooser(intent,"Select Picture"));
              }
          });
  
  
          sendEmail.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  String Emailid = to.getText().toString();
                  String sub = subject.getText().toString();
                  String message = msg.getText().toString();
  
                  Intent email = new Intent(Intent.ACTION_SEND);
                  email.putExtra(Intent.EXTRA_EMAIL, new String[]{Emailid});
                  email.putExtra(Intent.EXTRA_SUBJECT, sub);
                  email.putExtra(Intent.EXTRA_TEXT, message);
                  email.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//this will make such that when user returns to your app, your app is displayed, instead of the email app.
                 email.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(pic));
                 email.setType("message/rfc822");
               email.setType("image/jpeg");
  
                  try {
                      startActivity(Intent.createChooser(email, "Message was Sent"));
                  }
                  catch (ActivityNotFoundException e) {
                      Toast t = Toast.makeText(Complaints.this, "There is No Emial Client installed ", Toast.LENGTH_SHORT);
                      t.setGravity(Gravity.CENTER, 0, 10);
                      t.show();
                  }
              }
          });
  
  
      }
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
          if (requestCode == 10) {
              image = (Bitmap) data.getExtras().get("Data");
              ImageView i = (ImageView) findViewById(R.id.img);
              i.setImageBitmap(image);
              try
              {
                  File root= Environment.getExternalStorageDirectory();
                  if(root.canWrite())
                  {
                      pic=new File(root,"pic.jpeg");
                      FileOutputStream out=new FileOutputStream(pic);
                      image.compress(Bitmap.CompressFormat.JPEG,100,out);
                      out.flush();
                      out.close();
                  }
  
              } catch (IOException e)
              {
                  Log.e("BROKEN", "Could not write file " + e.getMessage());
              }
          }
      }
  
  }
  </code></pre>