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内声明使用权限,通常由以下三项




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

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



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

你可能感兴趣的:(Camera (拍照))