Camera (拍照)

1、调用系统Camera App实现拍照和摄像功能

//重写onActivityResult方法 
@Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == Activity.DEFAULT_KEYS_DIALER && resultCode == Activity.RESULT_OK){
        Bundle bundle = data.getExtras(); 
        Bitmap bitmap = (Bitmap) bundle.get("data");
        img_show.setImageBitmap(bitmap);

     // img_show.setImageURI(Uri.fromFile(currentImageFile));

   }
}


private static final int TAKE_PHOTO_REQUEST_CODE = 1;   
 public static void takePhoto(Context context) {
        String filePath = "";
        //手动获取拍照权限
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.CAMERA}, TAKE_PHOTO_REQUEST_CODE);   

         } else {
           
          //获取Uri
            ContentValues contentValues = new ContentValues(1);
            contentValues.put(MediaStore.Images.Media.DATA, currentImageFile.getAbsolutePath());
            Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);  

             Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
            /** * FLAG_GRANT_READ_URI_PERMISSION:表示读取权限; 
                * FLAG_GRANT_WRITE_URI_PERMISSION:表示写入权限。
             */
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);  
            startActivityForResult(intent, Activity.DEFAULT_KEYS_DIALER);  

         }
}

准备工作

上面调用系统Camera App,我们压根不需要任何权限,但是这里用Camera API,就必须在manifest内声明使用权限,通常由以下三项

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

一般拍照和摄像的时候需要写到sd卡上,所以还有一向权限声明如下

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

真做摄像功能时,需要音频录制和视频录制功能,所以又需要下面两项权限声明

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

另外使用Camera API拍照或摄像,都需要用到预览,预览就要用到SurfaceView,为此Activity的布局中必须有SurfaceView。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,966评论 25 709
  • 上一篇介绍了如何使用系统相机简单、快速的进行拍照,本篇将介绍如何使用框架提供的API直接控制摄像机硬件。 你还在为...
    Xiao_Mai阅读 12,010评论 4 18
  • Camera的使用。横竖屏,画面不变形 一、调用系统提供的拍照 二、自定义Camera 调用系统的Camera 实...
    maimingliang阅读 5,713评论 4 3
  • 嘟嘟美甲是我们的第一次创业。 创办嘟嘟美甲之前,我在小米工作,做小米主题商店这个业务,用小米手机的用户第一屏上就有...
    葫芦娃HS阅读 4,629评论 0 6
  • 是的,今天你批评人了吗?今天你抱怨了吗?今天你责备人了吗? 在我们日常生活中,有很多爱批评的人,比如嘀咕埋怨的父母...
    19画生阅读 2,578评论 0 1

友情链接更多精彩内容