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);
posted @ 2012-05-15 12:01  oldfeel  阅读(1227)  评论(0编辑  收藏  举报