diff options
| author | Tim Redfern <tim@eclectronics.org> | 2013-09-06 18:40:09 +0100 |
|---|---|---|
| committer | Tim Redfern <tim@eclectronics.org> | 2013-09-06 18:40:09 +0100 |
| commit | 65bff27967c6791dd9ee488ed425be35f515b3e0 (patch) | |
| tree | ceac6ff178ac01ad4fe5e8e57ff5d90fa6ff3d47 /src/com | |
initial commit
Diffstat (limited to 'src/com')
| -rw-r--r-- | src/com/example/rotorm/MainActivity.java | 259 |
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(); + } + + //} + } + +} |
