先建立录像窗口 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);

更多相关文章

  1. (原)Eclipse的java中文件读写
  2. Android File文件操作
  3. Android Button Maker(在线生成android shape xml文件的工具),真方
  4. Android 利用 xml 文件实现 ImageView 的加载转圈动画
  5. 【转】Android xml资源文件中@、@android:type、@*、?、@+含义和

随机推荐

  1. Android之WebView简易应用
  2. android绘制圆形图片、圆圈以及图片缩放
  3. android studio 中使用lambda表达式
  4. android studio接入微信支付
  5. Android中获取设备的各种信息总结
  6. Android Retrofit 2.0的基本使用
  7. Android(安卓)framework系统默认设置修改
  8. Android控件布局属性全解
  9. Android EditText和TextView图文混排
  10. android adb 抓包