Android自定义Camera相机

在这里插入图片描述

转载请表明出处https://blog.csdn.net/ZhijunHong/article/details/106873851,谢谢~

写在前面

Android Framework层为各种不同的Camera和Camera的特色功能提供了支持,使得你可以很方便的在应用使用拍照和录像功能。如果希望快速实现拍照与录制视频的方法是使用Intent方式调用系统提供的相机功能;当然,如果系统提供的方式不足以满足项目的需求,你就需要自定义Camera相机。本篇博客会通过Intent方式和自定义Camera两部分介绍如何使用相机功能。

传送门:https://github.com/zhijunhong/custom_view/tree/master/camera

Intent实现方式

  1. 权限申请

  • Camera permisson - 为了使用相机硬件,需要请求使用Camera的权限

    <uses-permission android:name="android.permission.CAMERA" />
    
  • Camera Features - 你的应用还必须声明使用相机功能

    <uses-feature android:name="android.hardware.camera" />
    

    增加相机功能到你的mainfest文件,这样Google Play可以阻止那些没有相机硬件或者没有相机特定功能的设备安装你的应用。

  • Storage Permission - 应用需要保存图片或者视频到设备的外置存储空间(SD card)上,则需要在manifest中指定存取权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
  1. 代码实现

    • 申请Camera和存储权限
        private void openCapturePicOrVideo() {
         
            PermissionX.init(this)
                    .permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    .request(new RequestCallback() {
         
                        @Override
                        public void onResult(boolean allGranted, List<String> grantedList, List<String> deniedList) {
         
                            if (allGranted) {
         
                              Toast.makeText(SystemCameraActivity.this, "All permissions are granted", Toast.LENGTH_LONG).show();
    
                                //拍照
                                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                                fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);     // create a file to save the image
                                intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
                                startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
    
                                //拍摄视频
    //                            Intent intent1 = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    //                            fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);       // create a file to save the video
    //                            intent1.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);      // set the image file name
    //                            intent1.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);     // set the video image quality to high
    //                            // start the Video Capture Intent
    //                            startActivityForResult(intent1, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
    
                            } else {
         
                                Toast.makeText(SystemCameraActivity.this, "These permissions are denied: $deniedList", Toast.LENGTH_LONG).show();
                            }
                        }
                    });
        }
    

    Android6.0以后的系统,需要在代码中申请敏感权限。这里为了方便起见,直接使用郭神的开源框架PermissionX申请Camera和存储权限

    • 获取camera intent结果回调
    @Override
        protected void 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值