Android 相机开发 闪光灯,前后摄像头切换,调整缩放比例

本文介绍了Android相机开发的相关知识,包括如何通过Intent调用系统相机,自定义相机的步骤,以及处理相机权限、图片存储、前后摄像头切换、闪光灯功能。在自定义相机时,特别提到了在onPause和onResume中处理相机释放问题,以及解决闪光灯无效的方案。同时强调了相机作为公共资源必须正确释放的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在开发的过程中,经常会要使用相机,android自己带有一个源生的app可以用来拍照,但是有时候为了更多的功能,我们需要自定义相机。

考虑点:
1、是否一定要用相机,没有相机的设备就不可以安装你的app了吗?
但是要记得再Manifest文件中声明,google play在没有相机的设备 上会自动过滤掉一定要使用相机的App。
2、你的应用将会怎样使用相机,调用系统已经存在的CameraApp,或者是自己定义一个App?调用系统的相机通过Intent就可以实现
3、图片存储,别的app是否可见?app卸载后是否还要可用?

Manifest文件配置
1、如果是通过intent调用相机,不需要申请权限。,通过添加Feature就可以满足

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

2、自定义相机,则需要申请权限

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

在声明权限之后,google play就会阻止你的app安装在没有相机的设备上。
如果图片需要保存的在SD卡上,需要指明权限

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

使用已经存在的相机APP步奏:
1、构造一个Intent,使用Intent的类型为,MediaStore.ACTION_IMAGE_CAPTURE
调用一个已经存在的相机应用
Intent可以附带一个参数MediaStore.EXTRA_OUTPUT,参数类型为Uri指定一个路径和
文件名保存相片
2、调用startActivityForResult()
3、在activity的onActivityResult()方法中会收到来自Intent的数据

构建一个Intent对象,设置Action,并将保存图片路径传入

Intent cameraIntent = new Intent();
            cameraIntent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
            imageUri = getImageFileUri();
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//指定了存储路径将返回的data将会是null
            startActivityForResult(cameraIntent, REQUESt_CODE_CAPTURE_IMAGE);
private Uri getImageFileUri()
{
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        File imageFile = new File(FileUtil.EXAMPLE_PATH + Constant.IMAGE +File.separator + timeStamp + ".jpg");

        return Uri.fromFile(imageFile);
}

在activity中的onAcivityResult方法中取数据,注意如果指定了保存路径,将不会有返回值,如果没有保存路径,则会返回路径。

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
            case REQUESt_CODE_CAPTURE_IMAGE:
                if (null != data)
                {

                }else
                {

                }
                break;
            }
        }
    }

2、自定义相机

遵循以下步奏:
1、检查是否有相机,访问请求

private boolean isCameraExist()
{
    return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
}

2、创建一个Activity类继实现SurfaceHolder接口
3、创建一个预览布局
4、创建动作监听,例如一个按钮拍照
5、拍照并保存
6、释放相机

相机功能:
an

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值