在Android开发中,相机(Camera)和图册(Gallery)是两个非常重要的组件,它们用于处理用户拍摄照片或选择已存在设备中的图片。本篇内容将深入探讨Android相机和图册的基本使用方法,并通过一个简单的Demo来展示如何实现这两个功能。 Android相机API允许开发者直接访问手机的摄像头,进行拍照、预览以及对拍摄结果的处理。在Android中,通常通过Intent的方式来启动系统相机应用,获取拍摄的照片。以下是一个启动相机的示例: ```java public void startCamera(View view) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 检查SD卡是否可用 if (isSDExsit()) { // 创建存放图片的文件夹 File dir = new File(Environment.getExternalStorageDirectory() + "/my"); if (!dir.exists()) { dir.mkdirs(); } // 创建并设置拍摄图片的文件 File file = new File(dir, "aaa.jpg"); // 设置相机Intent的参数,确保横屏拍摄 intent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, Configuration.ORIENTATION_UNDEFINED); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); } startActivityForResult(intent, camera); } ``` 在上述代码中,`ACTION_IMAGE_CAPTURE` 是用来启动相机应用的意图动作,`EXTRA_OUTPUT` 参数用于指定拍摄的照片保存位置。当用户完成拍照后,系统会通过`onActivityResult()`回调返回结果。 接着,Android图册是用户浏览和选择已有图片的界面,我们可以通过Intent启动图册,让用户选择一张图片。以下是启动图册的代码: ```java public void startGallery(View view) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivityForResult(intent, gallery); } ``` 在图册中选择图片后,同样会调用`onActivityResult()`方法,返回用户所选图片的Uri。 在`onActivityResult()`中,我们需要根据请求码(requestCode)判断是来自相机还是图册,然后处理返回的结果: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == camera && resultCode == RESULT_OK) { // 处理相机拍摄的结果 File photoFile = new File(getImageFilePath()); Bitmap bitmap = BitmapFactory.decodeFile(photoFile.getAbsolutePath()); iv.setImageBitmap(bitmap); } else if (requestCode == gallery && resultCode == RESULT_OK) { // 处理图册选择的结果 if (data != null) { Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); if (cursor != null) { cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); Bitmap bitmap = BitmapFactory.decodeFile(picturePath); iv.setImageBitmap(bitmap); } } } } // 获取图片的本地路径 private String getImageFilePath() { // 根据Uri获取图片的本地路径 String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(Uri.fromFile(new File("/my/aaa.jpg")), filePathColumn, null, null, null); if (cursor != null) { cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); return picturePath; } return null; } ``` 以上代码展示了如何在`onActivityResult()`中处理相机和图册返回的结果,将拍摄的照片或选择的图片显示在ImageView上。 在实际开发中,我们还需要考虑其他细节,比如权限管理(需要申请读写存储权限),图片的压缩处理(避免占用过多内存),以及异常处理等。此外,对于Android 6.0及以上版本,需要动态请求权限。 Android相机和图册功能的实现涉及到Intent、Uri、Bitmap等核心组件,理解并掌握这些知识点对于开发Android应用中的图像处理功能至关重要。通过上述的简单Demo,开发者可以快速入门并进一步扩展自己的应用。
- 粉丝: 2
- 资源: 944
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的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 程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型,程序运行可靠 这段程序是一个改进的粒子群算法,主要用于解决电力系统中的优化问题 下面我将对程序进行详