summaryrefslogtreecommitdiff
path: root/src/com/example/rotorm
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-09-06 18:40:09 +0100
committerTim Redfern <tim@eclectronics.org>2013-09-06 18:40:09 +0100
commit65bff27967c6791dd9ee488ed425be35f515b3e0 (patch)
treeceac6ff178ac01ad4fe5e8e57ff5d90fa6ff3d47 /src/com/example/rotorm
initial commit
Diffstat (limited to 'src/com/example/rotorm')
-rw-r--r--src/com/example/rotorm/MainActivity.java259
1 files changed, 259 insertions, 0 deletions
diff --git a/src/com/example/rotorm/MainActivity.java b/src/com/example/rotorm/MainActivity.java
new file mode 100644
index 0000000..c88d6fd
--- /dev/null
+++ b/src/com/example/rotorm/MainActivity.java
@@ -0,0 +1,259 @@
+package com.example.rotorm;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+
+import com.example.rotorm.R;
+
+import android.hardware.Camera;
+import android.hardware.Camera.Parameters;
+import android.media.MediaPlayer;
+import android.media.MediaRecorder;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Environment;
+import android.app.Activity;
+import android.content.Intent;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+import android.view.SurfaceHolder.Callback;
+import android.widget.Toast;
+
+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;
+ MediaPlayer mp;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ uriSound=Uri.parse("");
+
+ Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
+ startActivityForResult(intent, 10);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ menu.add(0, 0, 0, "Start");
+ //menu.add(0, 0, 0, "Pick audio track");
+ return super.onCreateOptionsMenu(menu);
+ // Inflate the menu; this adds items to the action bar if it is present.
+ //getMenuInflater().inflate(R.menu.main, menu);
+ //return true;
+ }
+
+ @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");
+ mp.stop();
+ }
+ 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 startPreview() throws IOException {
+
+ //http://stackoverflow.com/questions/12098298/android-camera-app-passed-null-surface
+ if(mCamera==null) mCamera = Camera.open();
+
+ setContentView(R.layout.main);
+
+ surfaceView = (SurfaceView) findViewById(R.id.surface_camera);
+
+ surfaceHolder = surfaceView.getHolder();
+ surfaceHolder.addCallback(this);
+ surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+
+ //mCamera.lock();
+ //mCamera.unlock();
+
+ mCamera.setPreviewDisplay(surfaceHolder);
+ mCamera.startPreview();
+
+ }
+
+ 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";
+
+ Log.i(null, "Saving video file: " + filename);
+
+ //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();
+
+ Log.i(null, "Audio file: " + uriSound);
+
+ //try {
+ //MediaPlayer mp = new MediaPlayer();
+ //MediaPlayer mp = MediaPlayer.create(this, R.raw.stick);
+ mp = MediaPlayer.create(this, uriSound);
+ //mp.setDataSource(this, uriSound);
+ mp.start();
+ ///} catch (IllegalArgumentException e) {
+ // TODO Auto-generated catch block
+ // e.printStackTrace();
+ //} catch (SecurityException e) {
+ // TODO Auto-generated catch block
+ // e.printStackTrace();
+ //} catch (IllegalStateException e) {
+ // TODO Auto-generated catch block
+ // e.printStackTrace();
+ //} catch (IOException e) {
+ // TODO Auto-generated catch block
+ // e.printStackTrace();
+ //}
+ }
+
+ protected void stopRecording() {
+
+ if(mrec!=null)
+ {
+ mrec.stop();
+ mrec.release();
+ mCamera.release();
+ mCamera.lock();
+ }
+
+ mp.stop();
+ }
+
+ 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();
+
+ Log.i("Sound file",uriSound.toString());
+
+ //String temp="audioFileName";
+ //this.getIntent().getStringExtra(temp);
+ //uriSound=Uri.parse(temp);
+ //uriSound=Uri.parse("/Music/stick.mp3");
+ try {
+ startPreview();
+ } catch (IOException e) {
+ Log.e("Preview","Error");
+ e.printStackTrace();
+ }
+
+ //}
+ }
+
+}