Advertisement
Guest User

Untitled

a guest
Sep 27th, 2016
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.04 KB | None | 0 0
  1. public class VideoFragment extends Fragment implements SurfaceHolder.Callback{
  2. private ToggleButton mToggleButton;
  3. private SurfaceHolder mHolder;
  4. private SurfaceView mSurfaceView;
  5. private MediaRecorder mMediaRecorder;
  6. private Camera mCamera;
  7. private boolean mInitSuccesful, isVideoButtonChecked = false;
  8. private ImageView takeVideoButton;
  9.  
  10.  
  11. public static VideoFragment newInstance() {
  12. Bundle args = new Bundle();
  13. VideoFragment fragment = new VideoFragment();
  14. fragment.setArguments(args);
  15. return fragment;
  16. }
  17.  
  18. public VideoFragment(){}
  19.  
  20. @Override
  21. public void onStart() {
  22. super.onStart();
  23. getActivity().setTitle(R.string.video);
  24. }
  25.  
  26. @Override
  27. public void onResume() {
  28. super.onResume();
  29.  
  30.  
  31. }
  32.  
  33. @Override
  34. public void onPause() {
  35. super.onPause();
  36. shutdown();
  37. }
  38.  
  39. @Override
  40. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  41. View rootView = inflater.inflate(R.layout.fragment_content, container, false);
  42.  
  43. ImageView takePictureButton = (ImageView) rootView.findViewById(R.id.pic);
  44. takePictureButton.setVisibility(View.GONE);
  45.  
  46.  
  47. mSurfaceView = (SurfaceView) rootView.findViewById(R.id.cameraView);
  48. mHolder = mSurfaceView.getHolder();
  49. mHolder.addCallback(this);
  50.  
  51.  
  52.  
  53. takeVideoButton = (ImageView) rootView.findViewById(R.id.video);
  54. takeVideoButton.setOnClickListener(new View.OnClickListener() {
  55. @Override
  56. public void onClick(View view) {
  57. if(!isVideoButtonChecked){
  58. if(mMediaRecorder == null) {
  59. try {
  60. initRecorder(mHolder.getSurface());
  61. } catch (IOException e) {
  62. e.printStackTrace();
  63. }
  64. }else{
  65. try {
  66. mMediaRecorder.start();
  67. }catch (NullPointerException e){
  68. e.printStackTrace();
  69. try {
  70. initRecorder(mHolder.getSurface());
  71. } catch (IOException ex) {
  72. ex.printStackTrace();
  73. }
  74. }
  75. }
  76.  
  77. isVideoButtonChecked = true;
  78. takeVideoButton.setImageResource(R.drawable.ic_video_p);
  79.  
  80. }else if (isVideoButtonChecked){
  81. mMediaRecorder.stop();
  82. mMediaRecorder.reset();
  83. try {
  84. initRecorder(mHolder.getSurface());
  85. } catch (IOException e) {
  86. e.printStackTrace();
  87. }
  88. isVideoButtonChecked = false;
  89. takeVideoButton.setImageResource(R.drawable.ic_video);
  90. }
  91.  
  92. }
  93. });
  94.  
  95.  
  96. return rootView;
  97. }
  98.  
  99. /* Init the MediaRecorder, the order the methods are called is vital to
  100. * its correct functioning.
  101. */
  102. private void initRecorder(Surface surface) throws IOException {
  103. // It is very important to unlock the camera before doing setCamera
  104. // or it will results in a black preview
  105. if(mCamera == null) {
  106. mCamera = Camera.open();
  107. mCamera.setDisplayOrientation(90);
  108. mCamera.unlock();
  109. }
  110.  
  111. if(mMediaRecorder == null)
  112. mMediaRecorder = new MediaRecorder();
  113.  
  114. mMediaRecorder.setPreviewDisplay(surface);
  115. mMediaRecorder.setCamera(mCamera);
  116.  
  117. mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
  118. mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
  119.  
  120. CamcorderProfile cpHigh = CamcorderProfile
  121. .get(CamcorderProfile.QUALITY_HIGH);
  122. mMediaRecorder.setProfile(cpHigh);
  123.  
  124.  
  125. File file = new File(Environment
  126. .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
  127. Utils.getVideoFilename());
  128. // "touch" the file
  129. if(!file.exists()) {
  130. File parent = file.getParentFile();
  131. if(parent != null)
  132. if(!parent.exists())
  133. if(!parent.mkdirs())
  134. throw new IOException("Cannot create " +
  135. "parent directories for file: " + file);
  136.  
  137. file.createNewFile();
  138. }
  139. mMediaRecorder.setOutputFile(file.getAbsolutePath());
  140. // No limit. Don't forget to check the space on disk.
  141. mMediaRecorder.setMaxDuration(60000); //60s
  142. try {
  143. mMediaRecorder.prepare();
  144. } catch (IllegalStateException e) {
  145. // This is thrown if the previous calls are not called with the
  146. // proper order
  147. e.printStackTrace();
  148. }
  149.  
  150. mInitSuccesful = true;
  151. }
  152.  
  153. @Override
  154. public void surfaceCreated(SurfaceHolder holder) {
  155. try {
  156. if(!mInitSuccesful)
  157. initRecorder(mHolder.getSurface());
  158. } catch (IOException e) {
  159. e.printStackTrace();
  160. }
  161. }
  162.  
  163. @Override
  164. public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
  165.  
  166. }
  167.  
  168. @Override
  169. public void surfaceDestroyed(SurfaceHolder holder) {
  170. shutdown();
  171. }
  172.  
  173.  
  174.  
  175. private void shutdown() {
  176. if(mMediaRecorder != null && mCamera != null){
  177. // Release MediaRecorder and especially the Camera as it's a shared
  178. // object that can be used by other applications
  179. mMediaRecorder.reset();
  180. mMediaRecorder.release();
  181. mCamera.release();
  182.  
  183. // once the objects have been released they can't be reused
  184. mMediaRecorder = null;
  185. mCamera = null;
  186. }
  187. }
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement