android 调用系统相机
在Android开发中,调用系统相机是常见的功能之一,它允许用户通过设备的摄像头拍摄照片,然后在应用程序中处理或展示这些图片。本篇将详细讲解如何实现这一过程,包括触发相机、保存照片、以及显示不同尺寸的图片。 我们需要在AndroidManifest.xml文件中添加相机权限: ```xml <uses-feature android:name="android.hardware.camera" android:required="true" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` `android.hardware.camera`表示应用需要使用摄像头,`android.permission.CAMERA`是调用相机的权限,而`android.permission.WRITE_EXTERNAL_STORAGE`则用于保存照片到外部存储。 接下来,创建一个按钮或触发器来启动相机: ```java Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } ``` 这里的`ACTION_IMAGE_CAPTURE`是系统相机的意图,`REQUEST_IMAGE_CAPTURE`是自定义请求码,用于在`onActivityResult()`方法中区分返回的结果。 当用户拍摄完照片后,系统会回调`onActivityResult()`: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); // 处理并保存图片 } } ``` 在`onActivityResult()`中,我们从返回的数据中获取到拍摄的照片,这是一个小尺寸的缩略图。如果需要大图,可以使用以下方式: 1. 在触发相机前,创建一个临时文件来保存原始图片: ```java File photoFile = createImageFile(); Uri photoURI = FileProvider.getUriForFile(this, "com.example.yourapp.fileprovider", photoFile); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); ``` 确保在`AndroidManifest.xml`中配置了`FileProvider`: ```xml <provider android:name="androidx.core.content.FileProvider" android:authorities="com.example.yourapp.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data> </provider> ``` 2. 创建`res/xml/file_paths.xml`来指定文件路径: ```xml <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-files-path name="images" path="Pictures" /> </paths> ``` 3. 在`onActivityResult()`中,读取并显示大图: ```java try { Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(photoURI)); // 显示大图 } catch (FileNotFoundException e) { e.printStackTrace(); } ``` 至此,我们已经完成了调用系统相机、保存照片以及显示不同尺寸图片的全过程。在实际应用中,可能还需要考虑图片的压缩、裁剪、旋转等操作,以适应不同的需求。此外,对于Android 6.0及以上版本,需要动态请求`WRITE_EXTERNAL_STORAGE`权限。理解和掌握这个过程对Android开发者来说是至关重要的,因为它涉及到与系统服务的交互和文件管理。
- 1
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- LCD1602电子时钟程序
- 西北太平洋热带气旋【灾害风险统计】及【登陆我国次数评估】数据集-1980-2023
- 全球干旱数据集【自校准帕尔默干旱程度指数scPDSI】-190101-202312-0.5x0.5
- 基于Python实现的VAE(变分自编码器)训练算法源代码+使用说明
- 全球干旱数据集【标准化降水蒸发指数SPEI-12】-190101-202312-0.5x0.5
- C语言小游戏-五子棋-详细代码可运行
- 全球干旱数据集【标准化降水蒸发指数SPEI-03】-190101-202312-0.5x0.5
- spring boot aop记录修改前后的值demo
- 全球干旱数据集【标准化降水蒸发指数SPEI-01】-190101-202312-0.5x0.5
- ActiveReports