android 录像/打开video文件
先建立录像窗口 map_video.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <SurfaceView android:id="@+id/arc_hf_video_view" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <TextView android:id="@+id/arc_hf_video_timer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="40dp" android:textColor="#ffff0000" android:textSize="35dp" android:textStyle="bold" > </TextView> <LinearLayout android:id="@+id/arc_hf_video_btn" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentRight="true" android:gravity="center" android:orientation="vertical" > <Button android:id="@+id/arc_hf_video_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/arc_hf_video_start" /> <Button android:id="@+id/arc_hf_video_return" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/arc_hf_video_return" /> </LinearLayout> </RelativeLayout>
主类 ArcHFVideo.java
public class ArcHFVideo extends Activity implements SurfaceHolder.Callback { private Button mVideoStartBtn, mVideoReturnBtn; private SurfaceView mSurfaceview; private MediaRecorder mMediaRecorder; private SurfaceHolder mSurfaceHolder; // private File mRecVedioPath; private File mRecAudioFile; private TextView timer; private int hour = 0; private int minute = 0; private int second = 0; private boolean bool; private int parentId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().setFormat(PixelFormat.TRANSLUCENT); setContentView(R.layout.map_video); parentId = getIntent().getIntExtra("parentId", 0); timer = (TextView) findViewById(R.id.arc_hf_video_timer); mVideoStartBtn = (Button) findViewById(R.id.arc_hf_video_start); mVideoReturnBtn = (Button) findViewById(R.id.arc_hf_video_return); mSurfaceview = (SurfaceView) this.findViewById(R.id.arc_hf_video_view); // 设置计时器不可见 timer.setVisibility(View.GONE); // 设置缓存路径 mRecVedioPath = new File(Environment.getExternalStorageDirectory() .getAbsolutePath() + "/hfdatabase/temp/"); if (!mRecVedioPath.exists()) { mRecVedioPath.mkdirs(); } // 绑定预览视图 SurfaceHolder holder = mSurfaceview.getHolder(); holder.addCallback(ArcHFVideo.this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mVideoStartBtn.setOnClickListener(new Button.OnClickListener() { private boolean isRecording = true; @Override public void onClick(View v) { Drawable iconStart = getResources().getDrawable( R.drawable.arc_hf_video_start); Drawable iconStop = getResources().getDrawable( R.drawable.arc_hf_video_stop); if (isRecording) { mVideoStartBtn.setBackgroundDrawable(iconStop); bool = true; if (mMediaRecorder == null) mMediaRecorder = new MediaRecorder(); else mMediaRecorder.reset(); mMediaRecorder.setPreviewDisplay(mSurfaceHolder .getSurface()); mMediaRecorder .setVideoSource(MediaRecorder.VideoSource.CAMERA); mMediaRecorder .setAudioSource(MediaRecorder.AudioSource.MIC); mMediaRecorder .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mMediaRecorder .setVideoEncoder(MediaRecorder.VideoEncoder.H264); mMediaRecorder .setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mMediaRecorder.setVideoSize(176, 144); mMediaRecorder.setVideoFrameRate(15); try { mRecAudioFile = File.createTempFile("Vedio", ".3gp", mRecVedioPath); } catch (IOException e1) { e1.printStackTrace(); } mMediaRecorder.setOutputFile(mRecAudioFile .getAbsolutePath()); try { mMediaRecorder.prepare(); timer.setVisibility(View.VISIBLE); handler.postDelayed(task, 1000); mMediaRecorder.start(); } catch (Exception e) { e.printStackTrace(); } isRecording = !isRecording; } else { mVideoStartBtn.setBackgroundDrawable(iconStart); if (mMediaRecorder != null) { mMediaRecorder.stop(); bool = false; timer.setText(format(hour) + ":" + format(minute) + ":" + format(second)); mMediaRecorder.release(); mMediaRecorder = null; audioRename(); } isRecording = !isRecording; } } }); mVideoReturnBtn.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { if (mMediaRecorder != null) { mMediaRecorder.stop(); mMediaRecorder.release(); mMediaRecorder = null; } audioRename(); finish(); } }); } @Override public void surfaceCreated(SurfaceHolder holder) { mSurfaceHolder = holder; } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { mSurfaceHolder = holder; } @Override public void surfaceDestroyed(SurfaceHolder holder) { mSurfaceview = null; mSurfaceHolder = null; mMediaRecorder = null; } /* * 生成Audio文件名字 */ protected void audioRename() { String path = Environment.getExternalStorageDirectory() .getAbsolutePath() + "/hfdatabase/video/" + String.valueOf(parentId) + "/"; String fileName = new SimpleDateFormat("yyyyMMddHHmmss") .format(new Date()) + ".3gp"; File out = new File(path); if (!out.exists()) { out.mkdirs(); } out = new File(path, fileName); mRecAudioFile.renameTo(out); } /* * 定时器设置,实现计时 */ private Handler handler = new Handler(); private Runnable task = new Runnable() { public void run() { if (bool) { handler.postDelayed(this, 1000); second++; if (second < 60) { timer.setText(format(second)); } else if (second < 3600) { minute = second / 60; second = second % 60; timer.setText(format(minute) + ":" + format(second)); } else { hour = second / 3600; minute = (second % 3600) / 60; second = (second % 3600) % 60; timer.setText(format(hour) + ":" + format(minute) + ":" + format(second)); } } } }; /* * 格式化时间 */ public String format(int i) { String s = i + ""; if (s.length() == 1) { s = "0" + s; } return s; } }
打开指定路径的video文件
File f = new File(filePath); Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(f), "video/*"); startActivity(intent);