Advertisement
rezayoga

CameraActivity.java

Mar 2nd, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.96 KB | None | 0 0
  1. package co.fppc.ig;
  2.  
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.hardware.Camera;
  7. import android.hardware.Camera.PictureCallback;
  8. import android.hardware.Camera.ShutterCallback;
  9. import android.net.Uri;
  10. import android.os.AsyncTask;
  11. import android.os.Bundle;
  12. import android.os.Environment;
  13. import android.util.Log;
  14. import android.view.SurfaceView;
  15. import android.view.View;
  16. import android.view.View.OnClickListener;
  17. import android.view.ViewGroup.LayoutParams;
  18. import android.view.Window;
  19. import android.view.WindowManager;
  20. import android.widget.Button;
  21. import android.widget.FrameLayout;
  22. import android.widget.ImageButton;
  23.  
  24. import com.google.android.gms.maps.model.LatLng;
  25.  
  26. import java.io.File;
  27. import java.io.FileNotFoundException;
  28. import java.io.FileOutputStream;
  29. import java.io.IOException;
  30.  
  31. import co.fppc.ig.database.model.TmpPhoto;
  32. import co.fppc.ig.database.model.User;
  33. import co.fppc.ig.library.GPSTracker;
  34. import co.fppc.ig.library.Helper;
  35. import co.fppc.ig.library.camera.Preview;
  36.  
  37. // Mendeklarasikan Activity untuk pengambilan gambar kondisi bencana (kamera)
  38. public class CameraActivity extends Activity {
  39.     private static final String TAG = "CameraActivity";
  40.     Preview preview;
  41.     Button buttonClick;
  42.     Camera camera;
  43.     private User user;
  44.     Activity act;
  45.     Context ctx;
  46.     String dateTakenTmpPhoto;
  47.     String tmpPhotoName;
  48.     private Intent intent;
  49.     private GPSTracker gps;
  50.     private LatLng taggedCoordinate;
  51.     private ImageButton imageButtonCapture;
  52.  
  53.     @Override
  54.     public void onCreate(Bundle savedInstanceState) {
  55.  
  56.         super.onCreate(savedInstanceState);
  57.         ctx = this;
  58.         act = this;
  59.         // Pada activity  / halaman ini tidak ditampilkan title, karena digunakan untuk menampilkan kamera
  60.         requestWindowFeature(Window.FEATURE_NO_TITLE);
  61.         getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
  62.  
  63.         setContentView(R.layout.activity_camera);
  64.  
  65.         // Mendeklarasikan intent untuk mengambil data yang dipassing melalui intent sebelumnya.
  66.         intent = getIntent();
  67.         if (intent != null) {
  68.             if (intent.getSerializableExtra("USER_SESSION") != null) {
  69.                 user = (User) intent.getSerializableExtra("USER_SESSION");
  70.                 Log.e("_USER_ID_", String.valueOf(user.getId()));
  71.                 Log.e("_USER_EMAIL_", user.getEmail());
  72.                 Log.e("_USER_PASSWORD_", user.getPassword());
  73.             }
  74.         }
  75.  
  76.         // Menginstansiasi button untuk capture foto
  77.         imageButtonCapture = (ImageButton) findViewById(R.id.image_button_capture);
  78.         // Mendeklarasikan event dari tombol capture tersebut untuk mulai mengambil gambar/foto
  79.         imageButtonCapture.setOnClickListener(new OnClickListener() {
  80.             @Override
  81.             public void onClick(View v) {
  82.                 camera.takePicture(shutterCallback, rawCallback, jpegCallback);
  83.             }
  84.         });
  85.  
  86.         // Mendeklarasikan class GPSTracker untuk mengambil posisi user sekarang
  87.         gps = new GPSTracker(CameraActivity.this);
  88.         // Check apakah fitur GPS pada smartphone diaktifkan?
  89.         if(gps.canGetLocation()){
  90.  
  91.             double latitude = gps.getLatitude();
  92.             double longitude = gps.getLongitude();
  93.  
  94.             // \n is for new line
  95.             //Helper.toast(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude);
  96.  
  97.             taggedCoordinate = new LatLng(latitude, longitude);
  98.             Log.d("_onLocationChanged_", "Lat: " + String.valueOf(String.format("%.8f", latitude)) + " Long: " + String.valueOf(String.format("%.8f", longitude)));
  99.         } else{
  100.             // can't get location
  101.             // GPS or Network is not enabled
  102.             // Ask user to enable GPS/network in settings
  103.             gps.showSettingsAlert();
  104.         }
  105.  
  106.         // Mendeklarasikan view untuk camera
  107.         preview = new Preview(this, (SurfaceView)findViewById(R.id.surfaceView));
  108.         preview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
  109.         ((FrameLayout) findViewById(R.id.layout)).addView(preview);
  110.         preview.setKeepScreenOn(true);
  111. /*
  112.         preview.setOnClickListener(new OnClickListener() {
  113.  
  114.             @Override
  115.             public void onClick(View arg0) {
  116.                 camera.takePicture(shutterCallback, rawCallback, jpegCallback);
  117.             }
  118.         });
  119. */
  120.  
  121.         Helper.toast(ctx, getString(R.string.take_photo_help));
  122.     }
  123.  
  124.     // Ketika state onResume, mengambil kembali data user 'USER_SESSION'
  125.     // Check apakah hardware camera mendukung
  126.     @Override
  127.     protected void onResume() {
  128.         super.onResume();
  129.         intent = getIntent();
  130.         if (intent != null) {
  131.             if (intent.getSerializableExtra("USER_SESSION") != null) {
  132.                 user = (User) intent.getSerializableExtra("USER_SESSION");
  133.                 Log.e("_USER_ID_", String.valueOf(user.getId()));
  134.                 Log.e("_USER_EMAIL_", user.getEmail());
  135.                 Log.e("_USER_PASSWORD_", user.getPassword());
  136.             }
  137.         }
  138.         int numCams = Camera.getNumberOfCameras();
  139.         if(numCams > 0){
  140.             try{
  141.                 camera = Camera.open(0);
  142.                 camera.startPreview();
  143.                 preview.setCamera(camera);
  144.             } catch (RuntimeException ex){
  145.                 Helper.toast(ctx, getString(R.string.camera_not_found));
  146.             }
  147.         }
  148.     }
  149.  
  150.     @Override
  151.     protected void onPause() {
  152.         if(camera != null) {
  153.             camera.stopPreview();
  154.             preview.setCamera(null);
  155.             camera.release();
  156.             camera = null;
  157.         }
  158.         super.onPause();
  159.     }
  160.  
  161.     private void resetCam() {
  162.         camera.startPreview();
  163.         preview.setCamera(camera);
  164.     }
  165.  
  166.     // Me-refresh gallery smartphonr
  167.     private void refreshGallery(File file) {
  168.         Intent mediaScanIntent = new Intent( Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
  169.         mediaScanIntent.setData(Uri.fromFile(file));
  170.         sendBroadcast(mediaScanIntent);
  171.     }
  172.  
  173.     ShutterCallback shutterCallback = new ShutterCallback() {
  174.         public void onShutter() {
  175.             //           Log.d(TAG, "onShutter'd");
  176.         }
  177.     };
  178.  
  179.     PictureCallback rawCallback = new PictureCallback() {
  180.         public void onPictureTaken(byte[] data, Camera camera) {
  181.             //           Log.d(TAG, "onPictureTaken - raw");
  182.         }
  183.     };
  184.  
  185.     PictureCallback jpegCallback = new PictureCallback() {
  186.         public void onPictureTaken(byte[] data, Camera camera) {
  187.             new SaveImageTask().execute(data);
  188.             resetCam();
  189.             Log.d(TAG, "onPictureTaken - jpeg");
  190.  
  191.         }
  192.     };
  193.  
  194.     // Inner class untuk menyimpan gambar / foto hasil lapang di ke server.
  195.     private class SaveImageTask extends AsyncTask<byte[], Void, Void> {
  196.  
  197.         @Override
  198.         protected Void doInBackground(byte[]... data) {
  199.             FileOutputStream outStream = null;
  200.  
  201.             // Write to SD Card
  202.             try {
  203.                 Log.d("DEBUG", Helper.getCurrentDateWIthFormat("yyyy-MM-dd HH:mm:ss:SSS"));
  204.  
  205.                 File sdCard = Environment.getExternalStorageDirectory();
  206.                 File dir = new File(sdCard.getAbsolutePath() + "/" + BuildConfig.APPLICATION_ID);
  207.                 dir.mkdirs();
  208.  
  209.                 dateTakenTmpPhoto = Helper.getCurrentDateWIthFormat("yyyy-MM-dd HH:mm:ss:SSS");
  210.                 tmpPhotoName = Helper.getCurrentDateWIthFormat("yyyy.MM.dd.HH.mm.ss.SSS");
  211.  
  212.                 File outFile = new File(dir, tmpPhotoName + ".jpg");
  213.  
  214.                 outStream = new FileOutputStream(outFile);
  215.                 outStream.write(data[0]);
  216.                 outStream.flush();
  217.                 outStream.close();
  218.  
  219.                 Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length + " to " + outFile.getAbsolutePath());
  220.  
  221.                 //Log.d("_USER_ID_", String.valueOf(user.getId()));
  222.  
  223.                 refreshGallery(outFile);
  224.  
  225.                 TmpPhoto tmpPhoto = new TmpPhoto();
  226.                 tmpPhoto.setUserId(user.getId());
  227.                 tmpPhoto.setPhotoLatitude(String.valueOf(String.format("%.8f", taggedCoordinate.latitude)));
  228.                 tmpPhoto.setPhotoLongitude(String.valueOf(String.format("%.8f", taggedCoordinate.longitude)));
  229.                 tmpPhoto.setPhotoCaption(null);
  230.                 tmpPhoto.setDateTakenPhoto(dateTakenTmpPhoto);
  231.                 tmpPhoto.setPhotoName(tmpPhotoName + ".jpg");
  232.  
  233.                 // Jika berhasil maka kembali ke MainActivity untuk mengisi content dari incident
  234.                 Intent intent = new Intent(getApplicationContext(), MainActivity.class);
  235.                 intent.putExtra("TMP_PHOTO", tmpPhoto);
  236.                 intent.putExtra("USER_SESSION", user);
  237.                 startActivity(intent);
  238.  
  239.             } catch (FileNotFoundException e) {
  240.                 e.printStackTrace();
  241.             } catch (IOException e) {
  242.                 e.printStackTrace();
  243.             } finally {
  244.             }
  245.             return null;
  246.         }
  247.  
  248.     }
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement