안 드 로 이 드 비디오 / 비디오 파일 열기

20455 단어 android
비디오 창 맵 만 들 기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);

좋은 웹페이지 즐겨찾기