title: saving pictures taken by camera in android app
body: <p>I have been stuck on this for a while now and have looked at various tutorials for help but have not yet succeeded.</p>
  
  <p>I have essentially utilised the <code>camera</code> function in my <strong>app</strong> to take <strong>pictures</strong> and display a <code>preview</code> of it <strong>BUT</strong> it can't save taken picture.</p>
  
  <p>Here is the <code>java</code> code containing my attempt to get it functioning according to tutorials:</p>
  
  <pre><code>public class Activity_Camera extends Activity implements View.OnClickListener {
  
      ImageButton ib;
      ImageView iv;
      Intent i;
      public static final int cameraData = 0;
      Bitmap bmp;
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          getMenuInflater().inflate(R.menu.activity_main, menu);
          return true;
      }
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
          case R.id.Info:
  
              Intent i = new Intent(this, Help.class);
              startActivity(i);
  
              return true;
          default:
              return super.onOptionsItemSelected(item);
          }
      }
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_camera);
          initialise();
      }
  
      private void initialise() {
          iv = (ImageView) findViewById(R.id.ivPicReturn);
          ib = (ImageButton) findViewById(R.id.ibTakePic);
  
          ib.setOnClickListener(this);
      }
  
      public void onClick(View v) {
          switch (v.getId()) {
          case R.id.ibTakePic:
              i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
              startActivityForResult(i, cameraData);
              break;
          }
      }
  
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
          if (resultCode == RESULT_OK) {
              Bundle extras = data.getExtras();
              bmp = (Bitmap) extras.get("data");
              iv.setImageBitmap(bmp);
  
              Toast.makeText(this, "Image saved to:\n" +
                      data.getData(), Toast.LENGTH_LONG).show();
         } else if (resultCode == RESULT_CANCELED) {
             // User cancelled the image capture
         } else {
             // Image capture failed, advise user
         }
      }
  
      private static Uri getOutputMediaFileUri(int type){
            return Uri.fromFile(getOutputMediaFile(type));
      }
      private static File getOutputMediaFile(int type){
  
          File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_PICTURES), "MyCameraApp");
  
          if (! mediaStorageDir.exists()){
              if (! mediaStorageDir.mkdirs()){
                  Log.d("MyCameraApp", "failed to create directory");
                  return null;
              }
          }
          File mediaFile;
          if (type == cameraData){
              mediaFile = new File(mediaStorageDir.getPath() + File.separator +
              "IMG_" + ".jpg");
          } else {
              return null;
          }
          return mediaFile;
      }
  }
  </code></pre>
  
  <p>I have already included all the neccessary <code>permissions</code> within the <code>Manifest.xml</code> file.</p>