Android学习——Camera、录制视频

Camera、录制视频

概述

Android框架架包含了各种相机和相机功能的支持,使你可以在你的应用中捕获图像和视频。
在我们的应用能使用设备上的相机之前,先想一想应用将来会如何使用此硬件:
(1) Camera必须——相机是必须的,你不希望你的应用安装到一个没有相机的设备上你应该在manifest文件中声明需要相机
(2)快速图像或自定义特性——你的应用将如何使用相机?你仅仅是抓取一个快速图片或视频剪辑,还是提供一个新的使用方式?
(3)存储——你的应用产生的图像和视频要给自己看还是共享给其它应用?你想在你的应用被删除后所创建的图像和视频仍然存在吗?

Android框架支持通过Camera API或Camera intent来抓取图像和视频:
.

  • Camera此类是控制设备相机的主要API,此类用于在创建相机应用时获取图片和视频。
  • SurfaceView此类为用户提供camera的实时图像预览。
  • MediaRecorder此类用于从camera录制视频。
  • Intent一个MediaStore ACTION IMAGE CAPTURE或MediaStore.ACTION VIDEO _CAPTURE的intent,可以使用它来抓取
    图像或视频,而不用操作Camera对象。

清单文件中的声明

调用相机设备的权限

<uses-permission android:name="android.permission.CAMERA"/>

声明相机特性,如果你的应用使用相机或相机的一些特性,但又不是必须的设置android:required=“false”(已过时)

<uses-feature android:name="android.hardware.Camera" android:required="false"/>

保存图片

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

录制视频的权限

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

使用现有的相机应用

private static final int MEDIA_TYPE_IMAGE=1;
private static final int MEDIA_TYPE_VIDEO=2;
    

	//拍照
    public void imageCapture(View view){
        Intent intent=new Intent();
        intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT,getOutputMediaFileUri(MEDIA_TYPE_IMAGE));
        startActivityForResult(intent,MEDIA_TYPE_IMAGE);
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            case RESULT_OK:
                if (MEDIA_TYPE_IMAGE==requestCode){
//                    Uri uri=data.getData();
                    System.out.println(file);
                }else if (MEDIA_TYPE_VIDEO==requestCode){

                }
                break;
        }
    }

    File file=null;
    private Uri getOutputMediaFileUri(int type){
        file=getOutputMediaFile(type);
        return Uri.fromFile(file);
    }

    private File getOutputMediaFile(int type){
        File file=null;
        String rootPath=null;
        switch (type){
            case MEDIA_TYPE_IMAGE:
                rootPath= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath();
                file=new File(rootPath+File.separator+System.currentTimeMillis()+".jpg");

                break;
            case MEDIA_TYPE_VIDEO:
                rootPath=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES).getPath();
                file=new File(rootPath+File.separator+System.currentTimeMillis()+".mp4");

                break;
        }
        return file;
    }

在这里插入图片描述

视频获取intent

使用相机intent获取视频是使用最少代码使得你的应用获取视频的捷径。
一个视频获取intent可以包含以下额外信息:
(1) MediaStore.EXTRA_OUTPUT——此设置需要一个保存视频的路径和文件名的Uri。此设置是可选的但强烈推荐,如果你不指定此值,相机应用就杷请求到的图像以默认的文件名保存到默认的文件夹下,这些信息保存在返回的intent的Intent.getData()字段中。
(2) MediaStore.EXTRA_ VIDEO_QUALITY——此值在最低质量最小文件R寸时是0,在最高质量最大文件尺寸时是1。
(3) MediaStore. EXTRA_ DURATION_LIMIT——此值设置获取视频的长度,以秒为单位。
(4) MediaStore.EXTRA_SIZE_ LIMIT——此值设置获取视频文件的大小,以字节为单位。

	//录像
    public void videoCapture(View view){
        Intent intent=new Intent();
        intent.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT,getOutputMediaFileUri(MEDIA_TYPE_VIDEO));
        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1);
        startActivityForResult(intent,MEDIA_TYPE_VIDEO);
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            case RESULT_OK:
                if (MEDIA_TYPE_IMAGE==requestCode){
//                    Uri uri=data.getData();
                    System.out.println(file);
                }else if (MEDIA_TYPE_VIDEO==requestCode){
                    System.out.println(file);
                    System.out.println(data.getData());
                }
                break;
        }
    }

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/UUUUUltraman/article/details/89512167
今日推荐