title: Android Extract EXIF metadata from byte[] data
body: <p>I have a custom camera application. I need metadata of Image captured by the custom camera. I saved the byte data before decodebytearray (Constant.imageData1 = data;) and save it to a constant class with type byte and before using this byte data I converted it to string. When I going to execute it with ExifInterface and show it to log, then the application crashes.</p>
  
  <p>Here is my OnPictureTaken Method:</p>
  
  <pre><code>PictureCallback mPicture = new PictureCallback() {
      @Override
      public void onPictureTaken(byte[] data, Camera camera) {
          Constant.imageData1 = data;
          Log.e("Camrera", "22222222222222222");
          BitmapFactory.Options bfo = new BitmapFactory.Options();
          bfo.inDither = false;
          // bfo.inJustDecodeBounds = true;
          bfo.inPurgeable = true;
          bfo.inTempStorage = new byte[16 * 1024];
  
          Intent intent = new Intent(context, PreviewActivity.class);
          // intent.putExtra("data", data);
          Bitmap bitmapPicture = BitmapFactory.decodeByteArray(data, 0,
                  data.length, bfo);
          Matrix matrix = new Matrix();
          if (Constant.result == 180) {
              matrix.postRotate(270);
          }
          if (Constant.result == 270) {
              matrix.postRotate(180);
          }
          int height = bitmapPicture.getHeight();
          int width = bitmapPicture.getWidth();
          //Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmapPicture,
                  //height, width, true);
          Bitmap rotatedBitmap = Bitmap.createBitmap(bitmapPicture, 0, 0,
                  bitmapPicture.getWidth(), bitmapPicture.getHeight(), matrix,
                  true);
          ByteArrayOutputStream blob = new ByteArrayOutputStream();
          Log.e("Camrera1", "22222222222222222");
          rotatedBitmap.compress(CompressFormat.JPEG,
                  50 /* ignored for PNG */, blob);
          byte[] bitmapdata = blob.toByteArray();
          Constant.imageData = bitmapdata;
          Log.e("Camrera2", "22222222222222222");
          startActivity(intent);
  
      }
  };
  </code></pre>
  
  <p>Here is my execution code:</p>
  
  <pre><code>private void SaveImage() {
      try {
          String data = byteArrayToString(Constant.imageData1);
          ExifInterface ex = new ExifInterface(data);
          String make = ex.getAttribute(ExifInterface.TAG_MAKE);
          Log.e("Make", make);
          Log.e("Make", make);
          Log.e("Make", make);
          finish();
  
      } catch (Exception e) {
              e.printStackTrace();
          }
  }
  </code></pre>
  
  <p>And the bytearraytostring method is:</p>
  
  <pre><code>public static String byteArrayToString(byte[] bytes)
  {
      return new String(bytes);
  }
  </code></pre>
  
  <p>This is very important to me. Please help me.</p>