summaryrefslogtreecommitdiff
path: root/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/com')
-rw-r--r--src/com/example/capture/MainActivity.java201
1 files changed, 201 insertions, 0 deletions
diff --git a/src/com/example/capture/MainActivity.java b/src/com/example/capture/MainActivity.java
new file mode 100644
index 0000000..b6e96de
--- /dev/null
+++ b/src/com/example/capture/MainActivity.java
@@ -0,0 +1,201 @@
+package com.example.capture;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+import android.app.Activity;
+import android.content.Intent;
+import android.hardware.Camera;
+import android.hardware.Camera.Parameters;
+import android.media.MediaRecorder;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Environment;
+import android.util.Log;
+import android.view.MenuItem;
+import android.view.SurfaceHolder;
+import android.view.SurfaceHolder.Callback;
+import android.view.Menu;
+import android.view.SurfaceView;
+import android.widget.Toast;
+
+//http://stackoverflow.com/questions/17042308/select-a-music-file-to-play-with-mediaplayer
+//http://stackoverflow.com/questions/2709087/turning-a-string-into-a-uri-android
+
+public class MainActivity extends Activity implements Callback {
+
+ @Override
+ protected void onDestroy() {
+ stopRecording();
+ super.onDestroy();
+ }
+
+ private SurfaceHolder surfaceHolder;
+ private SurfaceView surfaceView;
+ public MediaRecorder mrec = new MediaRecorder();
+ private Camera mCamera;
+ private Uri uriSound;
+
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+
+ surfaceView = (SurfaceView) findViewById(R.id.surface_camera);
+
+ mCamera = Camera.open();
+
+ surfaceHolder = surfaceView.getHolder();
+ surfaceHolder.addCallback(this);
+ surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+
+ uriSound=Uri.parse("");
+
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu)
+ {
+
+ menu.add(0, 0, 0, "Start");
+ menu.add(0, 0, 0, "Pick audio track");
+ return super.onCreateOptionsMenu(menu);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item)
+ {
+ if(item.getTitle().equals("Start"))
+ {
+ try {
+
+ startRecording();
+ item.setTitle("Stop");
+
+ } catch (Exception e) {
+
+ String message = e.getMessage();
+ Log.i(null, "Problem " + message);
+ mrec.release();
+ }
+
+ }
+ else if(item.getTitle().equals("Stop"))
+ {
+ mrec.stop();
+ mrec.release();
+ mrec = null;
+ item.setTitle("Start");
+ }
+ else if(item.getTitle().equals("Pick audio track"))
+ {
+ Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
+ startActivityForResult(intent, 10);
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+ protected void startRecording() throws IOException
+ {
+ if(mCamera==null)
+ mCamera = Camera.open();
+
+ String filename;
+ String path;
+
+ path= Environment.getExternalStorageDirectory().getAbsolutePath().toString();
+
+ Date date=new Date();
+ filename="/rec"+date.toString().replace(" ", "_").replace(":", "_")+".mp4";
+
+ //create empty file it must use
+ File file=new File(path,filename);
+
+ mrec = new MediaRecorder();
+
+ mCamera.lock();
+ mCamera.unlock();
+
+ // Please maintain sequence of following code.
+
+ // If you change sequence it will not work.
+ mrec.setCamera(mCamera);
+ mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
+ mrec.setAudioSource(MediaRecorder.AudioSource.MIC);
+ mrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
+ mrec.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
+ mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
+ mrec.setPreviewDisplay(surfaceHolder.getSurface());
+ mrec.setOutputFile(path+filename);
+ mrec.prepare();
+ mrec.start();
+
+
+ }
+
+ protected void stopRecording() {
+
+ if(mrec!=null)
+ {
+ mrec.stop();
+ mrec.release();
+ mCamera.release();
+ mCamera.lock();
+ }
+ }
+
+ private void releaseMediaRecorder() {
+
+ if (mrec != null) {
+ mrec.reset(); // clear recorder configuration
+ mrec.release(); // release the recorder object
+ }
+ }
+
+ private void releaseCamera() {
+ if (mCamera != null) {
+ mCamera.release(); // release the camera for other applications
+ mCamera = null;
+ }
+
+ }
+
+ @Override
+ public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
+
+ }
+
+ @Override
+ public void surfaceCreated(SurfaceHolder holder) {
+
+ if (mCamera != null) {
+ Parameters params = mCamera.getParameters();
+ mCamera.setParameters(params);
+ Log.i("Surface", "Created");
+ }
+ else {
+ Toast.makeText(getApplicationContext(), "Camera not available!",
+ Toast.LENGTH_LONG).show();
+
+ finish();
+ }
+
+ }
+
+ @Override
+ public void surfaceDestroyed(SurfaceHolder holder) {
+ mCamera.stopPreview();
+ mCamera.release();
+ //http://stackoverflow.com/questions/13235306/method-called-after-release-exception-camera-preview
+ //mCamera=null;
+ }
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+
+ if(requestCode == RESULT_OK && requestCode == 10){
+ uriSound=data.getData();
+ }
+ }
+}