在 Android 中,使用相机拍照涉及到一些基本的步骤,包括获取相机权限、启动相机应用、处理拍照结果等。以下是使用 Camera 拍照的基本入门信息:

1. 获取相机权限:
   - 在 AndroidManifest.xml 文件中添加相机权限。
    <uses-feature android:name="android.hardware.camera" />
    <uses-permission android:name="android.permission.CAMERA" />

   - 在运行时,确保动态请求相机权限。可以使用 [EasyPermissions](https://github.com/googlesamples/easypermissions) 库简化权限请求流程。

2. 启动相机应用并处理拍照结果:
   - 在你的 Activity 或 Fragment 中,使用 Intent 启动相机应用。
    static final int REQUEST_IMAGE_CAPTURE = 1;

    private void dispatchTakePictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        }
    }

   - 在 onActivityResult 方法中处理拍照结果。
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            Bitmap imageBitmap = (Bitmap) extras.get("data");

            // 处理拍照结果,例如显示在ImageView中
            imageView.setImageBitmap(imageBitmap);
        }
    }

   - 注意,这种方式返回的是缩略图,如果需要保存原始照片,需要使用文件保存方式。

3. 保存原始照片:
   - 在启动相机应用时,指定照片保存的路径。
    private File createImageFile() throws IOException {
        // 创建一个唯一的文件名
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
        File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File imageFile = File.createTempFile(imageFileName, ".jpg", storageDir);

        // 将文件路径保存以供后续使用
        currentPhotoPath = imageFile.getAbsolutePath();
        return imageFile;
    }

   - 在 onActivityResult 中保存原始照片。
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            // 处理拍照结果
            if (currentPhotoPath != null) {
                // 处理原始照片,例如显示在ImageView中
                Bitmap imageBitmap = BitmapFactory.decodeFile(currentPhotoPath);
                imageView.setImageBitmap(imageBitmap);
            }
        }
    }

   - 注意,保存原始照片需要处理文件的读写权限。

4. 处理权限请求和版本适配:
   - 在 Android 6.0 及以上版本,需要处理动态权限请求。
    @AfterPermissionGranted(REQUEST_CAMERA_PERMISSION)
    private void requestCameraPermission() {
        String[] perms = {Manifest.permission.CAMERA};
        if (EasyPermissions.hasPermissions(this, perms)) {
            // 已经获取相机权限,执行拍照操作
            dispatchTakePictureIntent();
        } else {
            // 申请相机权限
            EasyPermissions.requestPermissions(this, "需要相机权限", REQUEST_CAMERA_PERMISSION, perms);
        }
    }

    // 处理权限请求结果
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }

    // 权限授予成功的回调
    @Override
    public void onPermissionsGranted(int requestCode, List<String> perms) {
        // 相机权限授予成功,执行拍照操作
        dispatchTakePictureIntent();
    }

    // 权限拒绝的回调
    @Override
    public void onPermissionsDenied(int requestCode, List<String> perms) {
        // 处理权限被拒绝的情况
    }

以上是使用 Camera 拍照的基本入门信息。需要注意的是,由于 Android 系统版本的不同,部分 API 可能已经过时,因此需要谨慎处理版本适配问题。


转载请注明出处:http://www.zyzy.cn/article/detail/15238/Android