Android 拍照、从相册选择图片
在Android开发中,获取图片是常见的功能,涵盖了用户通过拍照或从相册选取图片的场景。这个过程涉及到多个步骤和关键知识点,以下将详细讲解。 我们要了解Android的权限管理。在Android 6.0(API级别23)及更高版本中,应用需要在运行时请求`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限来访问和修改外部存储,包括读取相册和保存图片。在AndroidManifest.xml中声明权限后,需要在运行时动态请求这些权限。 拍照功能通常通过调用系统相机应用实现。可以创建一个Intent,设置其类型为"image/*",然后启动相机Activity。当用户拍照并保存后,相机应用会回调我们的应用,传递一个包含图片URI的数据。例如: ```java Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } ``` 其中,`REQUEST_IMAGE_CAPTURE`是自定义的请求码,用于在onActivityResult()中区分不同来源的结果。 从相册选择图片则使用`ACTION_PICK`或者`ACTION_GET_CONTENT` Intent。启动相册应用,让用户选择一张图片,然后返回选中的图片URI。代码如下: ```java Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, REQUEST_IMAGE_PICK); ``` 在onActivityResult()方法中,我们需要处理返回的结果,通常通过`data.getData()`获取选中图片的URI。 获取到URI后,我们可能需要将其转换为Bitmap显示在ImageView或其他控件上。这可以通过ContentResolver和InputStream实现: ```java Bitmap bitmap; try { InputStream inputStream = getContentResolver().openInputStream(data.getData()); bitmap = BitmapFactory.decodeStream(inputStream); } catch (FileNotFoundException e) { e.printStackTrace(); } ``` 如果需要保存图片到本地,我们可以创建一个新的文件,并使用Bitmap的compress方法写入。例如: ```java File outputDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); File outputFile = new File(outputDir, "image.jpg"); try { FileOutputStream out = new FileOutputStream(outputFile); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); out.close(); } catch (IOException e) { e.printStackTrace(); } ``` 在完成以上操作后,别忘了更新媒体库,以便用户能在相册中看到新保存的图片: ```java sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(outputFile))); ``` 如果需要删除文件,可以使用File类的delete()方法: ```java if (outputFile.exists()) { outputFile.delete(); } ``` Android拍照和从相册选择图片涉及了权限管理、Intent启动相机或相册、处理返回结果、Bitmap操作以及文件I/O等多个核心知识点。理解并掌握这些知识点对于开发Android应用至关重要。
- 1
- 粉丝: 7
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- T型3电平逆变器,lcl滤波器滤波器参数计算,半导体损耗计算,逆变电感参数设计损耗计算 mathcad格式输出,方便修改 同时支持plecs损耗仿真,基于plecs的闭环仿真,电压外环,电流内环
- 毒舌(解锁版).apk
- 显示HEX、S19、Bin、VBF等其他汽车制造商特定的文件格式
- 8bit逐次逼近型SAR ADC电路设计成品 入门时期的第三款sarADC,适合新手学习等 包括电路文件和详细设计文档 smic0.18工艺,单端结构,3.3V供电 整体采样率500k,可实现基
- 操作系统实验 ucorelab4内核线程管理
- 脉冲注入法,持续注入,启动低速运行过程中注入,电感法,ipd,力矩保持,无霍尔无感方案,媲美有霍尔效果 bldc控制器方案,无刷电机 提供源码,原理图
- Matlab Simulink#直驱永磁风电机组并网仿真模型 基于永磁直驱式风机并网仿真模型 采用背靠背双PWM变流器,先整流,再逆变 不仅实现电机侧的有功、无功功率的解耦控制和转速调节,而且能实
- 157389节奏盒子地狱模式第三阶段7.apk
- 操作系统实验ucore lab3
- DG储能选址定容模型matlab 程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型,程序运行可靠 这段程序是一个改进的粒子群算法,主要用于解决电力系统中的优化问题 下面我将对程序进行详