Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class VideoFragment extends Fragment implements SurfaceHolder.Callback{
- private ToggleButton mToggleButton;
- private SurfaceHolder mHolder;
- private SurfaceView mSurfaceView;
- private MediaRecorder mMediaRecorder;
- private Camera mCamera;
- private boolean mInitSuccesful, isVideoButtonChecked = false;
- private ImageView takeVideoButton;
- public static VideoFragment newInstance() {
- Bundle args = new Bundle();
- VideoFragment fragment = new VideoFragment();
- fragment.setArguments(args);
- return fragment;
- }
- public VideoFragment(){}
- @Override
- public void onStart() {
- super.onStart();
- getActivity().setTitle(R.string.video);
- }
- @Override
- public void onResume() {
- super.onResume();
- }
- @Override
- public void onPause() {
- super.onPause();
- shutdown();
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View rootView = inflater.inflate(R.layout.fragment_content, container, false);
- ImageView takePictureButton = (ImageView) rootView.findViewById(R.id.pic);
- takePictureButton.setVisibility(View.GONE);
- mSurfaceView = (SurfaceView) rootView.findViewById(R.id.cameraView);
- mHolder = mSurfaceView.getHolder();
- mHolder.addCallback(this);
- takeVideoButton = (ImageView) rootView.findViewById(R.id.video);
- takeVideoButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if(!isVideoButtonChecked){
- if(mMediaRecorder == null) {
- try {
- initRecorder(mHolder.getSurface());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }else{
- try {
- mMediaRecorder.start();
- }catch (NullPointerException e){
- e.printStackTrace();
- try {
- initRecorder(mHolder.getSurface());
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- }
- isVideoButtonChecked = true;
- takeVideoButton.setImageResource(R.drawable.ic_video_p);
- }else if (isVideoButtonChecked){
- mMediaRecorder.stop();
- mMediaRecorder.reset();
- try {
- initRecorder(mHolder.getSurface());
- } catch (IOException e) {
- e.printStackTrace();
- }
- isVideoButtonChecked = false;
- takeVideoButton.setImageResource(R.drawable.ic_video);
- }
- }
- });
- return rootView;
- }
- /* Init the MediaRecorder, the order the methods are called is vital to
- * its correct functioning.
- */
- private void initRecorder(Surface surface) throws IOException {
- // It is very important to unlock the camera before doing setCamera
- // or it will results in a black preview
- if(mCamera == null) {
- mCamera = Camera.open();
- mCamera.setDisplayOrientation(90);
- mCamera.unlock();
- }
- if(mMediaRecorder == null)
- mMediaRecorder = new MediaRecorder();
- mMediaRecorder.setPreviewDisplay(surface);
- mMediaRecorder.setCamera(mCamera);
- mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
- mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
- CamcorderProfile cpHigh = CamcorderProfile
- .get(CamcorderProfile.QUALITY_HIGH);
- mMediaRecorder.setProfile(cpHigh);
- File file = new File(Environment
- .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
- Utils.getVideoFilename());
- // "touch" the file
- if(!file.exists()) {
- File parent = file.getParentFile();
- if(parent != null)
- if(!parent.exists())
- if(!parent.mkdirs())
- throw new IOException("Cannot create " +
- "parent directories for file: " + file);
- file.createNewFile();
- }
- mMediaRecorder.setOutputFile(file.getAbsolutePath());
- // No limit. Don't forget to check the space on disk.
- mMediaRecorder.setMaxDuration(60000); //60s
- try {
- mMediaRecorder.prepare();
- } catch (IllegalStateException e) {
- // This is thrown if the previous calls are not called with the
- // proper order
- e.printStackTrace();
- }
- mInitSuccesful = true;
- }
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- try {
- if(!mInitSuccesful)
- initRecorder(mHolder.getSurface());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
- }
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) {
- shutdown();
- }
- private void shutdown() {
- if(mMediaRecorder != null && mCamera != null){
- // Release MediaRecorder and especially the Camera as it's a shared
- // object that can be used by other applications
- mMediaRecorder.reset();
- mMediaRecorder.release();
- mCamera.release();
- // once the objects have been released they can't be reused
- mMediaRecorder = null;
- mCamera = null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement