先建立录像窗口 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. android -上传文件到服务器
  2. 介绍一下android的各种权限。 代码如下: Html代码 <manifestxmlns
  3. android aosp 下载源代码
  4. Android中使用XmlPullParse解析xml文件
  5. 如何将library项目打包成jar文件
  6. How to decompile .dex file on Android如何反编译.dex文件
  7. 《android开发应用实战详解》光盘源代码
  8. Android 源码编译 文件系统制作
  9. manifest文件

随机推荐

  1. 用charles拦截android设备https,证书无效
  2. Android Studio 官方最新版下载地址(支持
  3. Android(安卓)高仿微信头像截取 打造不一
  4. android 画饼图 Canvas drawArc
  5. visual studio2019 Android SDK API28出
  6. Android PDF开发:android-pdfview
  7. android模拟sd卡的问题
  8. AIDL跨进程通讯
  9. Android 抢购类倒计时实现 (包括天数,小时,
  10. Android 开发环境下载连接