Android 调用相机APP获取拍照图片和从相册选择图片

本文详细分析了Android中调用相机APP获取拍照图片和从相册选择图片的方法,包括从源码中解析图片的两个输出分支,如何获取预览图和原始图片,以及在Android N后使用FileProvider的必要性。同时介绍了如何调用系统相册并进行图片裁剪的操作。

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

源码部分分析

Camera.java → 点我定位,注意研究1134行与2023行的两个方法。

通过源码可以发现,输出的图片有2个分支

如果你没有指定Intent里面的Extra参数,它就返回一个序列化(putExtra(“data”, bitmap))的Bitmap,从理论上来说,这样的代码写的很烂,属于Magic Number。

如果你指定了Intent里面的Extra参数MediaStore.EXTRA_OUTPUT,拍照后它就直接把bitmap写到了Uri里面了,返回是空

一、获得拍照的预览图

使用范围:获得很小的预览图,用于设置头像等地方。
返回示例:bitmap = data.getExtras().getParcelable(“data”);

public final static int REQUEST_IMAGE_CAPTURE = 1;

//start
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);

//receive
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode != RESULT_OK) {
      Log.d(TAG, "canceled or other exception!");
      return;
    }

    if (requestCode == REQUEST_IMAGE_CAPTURE) {
      Log.d(TAG, "REQUEST_IMAGE_CAPTURE");
      Bitmap bitmap;
      try {
        //"data"这个居然没用常量定义,也是醉了,我们可以发现它直接把bitmap序列化到intent里面了。
        bitmap = data.getExtras().getParcelable("data"); 
        //TODO:do something with bitmap, Do NOT forget call Bitmap.recycler();
        mCameraImageview.setImageBitmap(bitmap);
      } catch
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛瑄

文章不错,请博主吃包辣条

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值