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