在Android开发中,选择相机和系统相册是常见的功能,用于获取用户拍摄的照片或选取已有的图片。 ImgUtil 是一个自定义的工具类,它封装了这部分操作,简化了开发者的工作。下面我们将详细讨论 ImgUtil 类中的关键方法和实现原理。 ImgUtil 提供了两个常量,分别表示拍照(TAKE_PHOTO)和选择相册(CHOOSE_PHOTO)的请求码。这些请求码在处理 onActivityResult() 方法时用于区分来自不同操作的结果。 在Android 6.0(API 级别 23)及以上版本,应用需要在运行时请求权限。因此,ImgUtil 中包含了两个权限请求码,REQUEST_CODE_CAMERA 和 REQUEST_CODE_ALBUM,用于相机和相册的权限请求。 ImgUtil 类中有一个静态变量 `imageUri`,这是用于存储相机拍摄图片的 Uri。在Android 7.0及以上版本,由于安全原因,拍摄的照片不能直接保存到应用私有目录,而是需要通过 FileProvider 创建一个临时 Uri 来访问。 以下是 ImgUtil 中的关键方法: 1. **choicePhoto()**:这个方法用于弹出一个对话框,让用户选择拍照或从相册选取图片。它创建了一个 AlertDialog 并设置了两个按钮,分别对应“拍照”和“选择相册”。点击每个按钮会触发对应的事件。 2. **openCamera()**:当用户选择拍照时,这个方法会被调用。它首先检查相机权限,如果缺少权限,则请求权限;如果已有权限,就启动相机应用。在Android 7.0及以上版本,我们需要创建一个 File 对象来存储照片,并通过 FileProvider 创建 Uri,以便相机应用可以访问。 3. **requestPermission()**:这是一个辅助方法,用于在Android 6.0及以上版本请求权限。它接受一个权限列表并调用 ActivityCompat.requestPermissions() 来发起权限请求。 4. **createImageFile()**:这个方法用于在外部存储创建一个临时文件,用于存储相机拍摄的照片。返回的 Uri 将被传递给相机应用,以便其可以将照片保存到这个文件中。 5. **getOutputMediaFile()**:这是一个辅助方法,用于创建一个 File 对象,通常用于存储图片或视频。它根据给定的媒体类型(如 MediaStore.Images.Media)创建一个位于外部存储的文件。 6. **compressBitmap(Bitmap bitmap)**:此方法用于压缩 Bitmap 对象,减少内存占用。它通过 ByteArrayOutputStream 和 BitmapFactory.Options 实现,可以根据需要调整压缩质量。 在实际使用 ImgUtil 时,你需要在 Activity 的 onActivityResult() 方法中处理返回的结果,例如解析 Uri 并显示选择的图片。同时,不要忘记处理 onRequestPermissionsResult() 方法,当用户对权限请求做出响应时,该方法会被调用。 ImgUtil 是一个实用的工具类,它简化了Android应用中选择相机和系统相册的操作。通过这个类,开发者可以轻松地集成这些功能,同时考虑到权限管理和Android的不同版本适配。
1
demo还在不断完善中......,欢迎各位胖友下载看看并给出建议
2024-03-21 16:15:52 5.9MB 微信聊天
1
【TakePicture】项目分为两大部分,分别从不同开发场景出发。 随着市场上不同版本、机型手机的出现,老项目迭代维护成本高。 本Demo最初目的: 实现如下功能之外,为了适配不同版本机型手机; 实测:android 8、9、10、11、13以及鸿蒙系统有效。 机型:小米、OPPO、VIVO、华为手机。 1. 上传头像并裁剪。 2. 上传多张照片并做压缩处理,图片可实现在线预览,伸缩放大等功能。
2023-12-15 22:58:38 17.17MB android
1
asp.net mvc模式移动端拍照选择相册图片 使用JS代码实现 效果很好
2023-03-17 20:11:52 4.67MB 移动端 拍照 相册图片
1
初识MediaProvider 需求:发朋友圈进行图片的选择,或者扫描二维码从图库选取。。。那么我们如何实现?这就需要借助媒体库的内容提供者MediaProvider,通过它,我们不仅可以读取图片,还可以读取视频,音频。 下面我们来看一下媒体库的内容提供者的URI(源码地址) 媒体库Uri 图片MediaStore.Images.Media.EXTERNAL_CONTENT_URI 音频MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 视频MediaStore.Video.Media.EXTERNAL_CONTENT_URI 拿到Uri,如果要为我们所用,
2022-12-05 11:28:29 210KB id roi 图片
1
Android选择相册拍照裁剪图片完美效果,防止裁剪使相册照片变形!
2022-05-02 15:53:59 41.19MB 拍照 相册 裁剪 Android
1
本文实例为大家分享了Android实现选择相册图片并显示的具体代码,供大家参考,具体内容如下 需求描述: 选择手机相册中的一张图片,并通过ImageView展示出来 参考博文: android打开手机相册获取真正的图片路径 效果展示: 示例代码: MainActivity package com.example.www.mutilmedia; import android.Manifest; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager
2022-04-17 15:03:02 70KB context id string
1
话不多说,先上效果图 大致的思路 要从RN中调用原生相机拍照和选择照片思路是这样的,先在原生中创建一个ReactContextBaseJavaModule模块,并在该模块中显示调用原生相机和选择照片的方法。然后,将该模块添加到ReactPackage列表中。最后,在js中导入该模块使用。关于原生模块的创建以及在js中如何调用请参考下面这篇文章: https://blog.csdn.net/weixin_38824257/article/details/103905668 下面是调用原生拍照和选择相册的具体实现 1.编写提供给RN调用的拍照和选择照片的方法。 首先创建一个继承自ReactCon
2022-01-11 18:10:29 97KB act AND android
1
Android 拍照或选择相册上传,非常实用,直接部署可用!
2021-10-15 23:19:33 1.3MB Android
1
Flutter选择图片和拍照示例,详情请看博客:https://yuzhiqiang.blog.csdn.net/article/details/88345232
2021-10-08 16:52:42 134.1MB flutte 拍照 选择图片
1