Android 使用系统相机拍摄照片保存到本地并在系统相册中显示

这篇博客介绍了如何在Android应用中利用系统相机拍摄照片,将照片保存到本地,并通过广播通知系统相册更新,以便用户能在相册中查看和操作这些图片。文章详细比较了两种调用相机的方式:指定保存路径和不指定路径,以及各自的实现方法和效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我的第一篇博客文章,一直获取别人的劳动成果,今天开始我也要分享我的劳动成果给大家。这篇博客主要探讨使用Android 手机自带相机拍摄照片并把照片保存到本地,并通过广播通知系统相册进行更新图片,这样我们可以在系统的相册中找到相应的图片并可以对相应的图片进行操作。
我们知道使用系统默认的相机拍摄照片有两种方式:

  • 在intent中指定图片保存的路径
    如果我们在intent 中指定了图片保存的路径,那么我们调用相机拍照之后拍的照片会保存在指定的路径下,和使用手机的相机拍照一样,图片比较大。先看下面的代码:
public class MainActivity extends AppCompatActivity {

    private Button myPhoto;
    private File picture;
    @Override
    protected void onCreate
Android应用程序中,你可以通过以下步骤实现调用系统相机拍摄照片保存本地: 1. **权限请求**: 首先,在`AndroidManifest.xml`文件中添加Camera和存储文件读写的权限: ```xml <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 2. **创建CameraManager实例**: 使用`CameraManager`来获取设备摄像头信息以及开启相机服务: ```java CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); String cameraId = cameraManager.getCameraIdList().get(0); // 获取第一个可用的摄像头ID ``` 3. **打开相机**: 请求用户允许访问相机开始预览: ```java try { cameraManager.openCamera(cameraId, new CameraCallback(), activity); } catch (IOException e) { e.printStackTrace(); } ``` 这里需要定义一个`CameraCallback`,它会在拍照后处理图片数据。 4. **设置拍照回调**: 通常使用`ACTION_IMAGE_CAPTURE` intent启动相机捕获结果: ```java Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, REQUEST_CODE_TAKE_PHOTO); ``` 然后在`onActivityResult`方法中解析图片数据。 5. **处理拍照结果**: 当用户拍摄完毕后,会返回到你的Activity,这里检查请求码处理结果: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_TAKE_PHOTO && resultCode == RESULT_OK) { Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); saveImageToInternalStorage(imageBitmap); } } private void saveImageToInternalStorage(Bitmap bitmap) { // 将bitmap转换为字节数组保存到应用目录下的相册 ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); byte[] bytes = stream.toByteArray(); MediaStore.Images.Media.insertInto(contentResolver, null, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Uri.fromFile(new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "image.jpg"))); } ``` 6. **关闭相机**: 拍照完成后记得关闭相机: ```java cameraManager.closeCamera(cameraId); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值