summaryrefslogtreecommitdiff
path: root/ref/MainActivity.java
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-09-09 12:38:17 +0100
committerTim Redfern <tim@eclectronics.org>2013-09-09 12:38:17 +0100
commita2e3dedbe4e09c4299143110bf938956c74ffe6c (patch)
treedf3804c8d7f144628a8d659d74f1f72e1f4fda18 /ref/MainActivity.java
parent312a9dcf702f662ffbbd96690bbc57b33af3445d (diff)
integrated working example
Diffstat (limited to 'ref/MainActivity.java')
-rw-r--r--ref/MainActivity.java323
1 files changed, 323 insertions, 0 deletions
diff --git a/ref/MainActivity.java b/ref/MainActivity.java
new file mode 100644
index 0000000..a49f299
--- /dev/null
+++ b/ref/MainActivity.java
@@ -0,0 +1,323 @@
+package com.example.rotorm;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+import java.util.List;
+
+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
+ //http://developer.android.com/training/camera/cameradirect.html
+ //http://developer.android.com/guide/topics/media/camera.html#custom-camera
+
+ if (mCamera!=null){
+ Log.e("Rotor", "Nulling camera");
+ mCamera.stopPreview();
+ mCamera.setPreviewCallback(null);
+ mCamera.release();
+ mCamera=null;
+ }
+
+ if(mCamera == null){
+ mCamera = Camera.open();
+ Log.i("Rotor", "Setting up camera");
+
+ /*
+ Camera.Parameters parameters = mCamera.getParameters();
+ //get a list of supported preview sizes and assign one
+ List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
+ Camera.Size previewSize = previewSizes.get(0);
+ parameters.setPreviewSize(previewSize.width, previewSize.height);
+ //Set Frame rate
+ parameters.setPreviewFrameRate(25);
+ //Set Scene
+ List<String> modes = parameters.getSupportedSceneModes();
+ parameters.setSceneMode(modes.get(0));
+ //Set focus mode
+ List<String> focus = parameters.getSupportedFocusModes();
+ parameters.setFocusMode(focus.get(0));
+
+ */
+
+
+
+
+
+
+ Camera.Parameters parameters = mCamera.getParameters();
+ parameters.setPreviewSize(1280,720);
+ parameters.setPreviewFrameRate(25);
+ parameters.setSceneMode(Camera.Parameters.SCENE_MODE_SPORTS);
+ parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
+ parameters.setColorEffect(Camera.Parameters.EFFECT_NONE);
+ mCamera.setParameters(parameters);
+
+ //Apply parameters to camera object
+ mCamera.setParameters(parameters);
+ Log.e("Rotor", "Camera configured");
+ }
+ /*
+
+ //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();
+
+ ////crashes on nexus 10
+ //09-07 15:36:21.850: E/AndroidRuntime(5418): java.lang.RuntimeException: getParameters failed (empty parameters)
+
+ //Start the preview
+ Log.e("Rotor", "Starting preview");
+ //mCamera.setPreviewCallback(new cam_PreviewCallback());
+ 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();
+ }
+
+
+ //}
+ }
+
+}