Android调用摄像头与相册实战教程
需积分: 0 12 浏览量
更新于2024-08-05
收藏 420KB PDF 举报
"本教程主要介绍如何在Android应用中实现调用摄像头和打开相册的功能,通过一个简单的案例进行讲解。"
在Android开发中,调用摄像头和相册是常见的功能,用于让用户拍摄照片或选择已有的图片。以下是如何实现这一功能的详细步骤:
1. 案例效果
这个案例旨在创建一个简单的用户界面,包含一个ImageView用于展示图片,以及一个Button,点击后可以选择调用摄像头拍照或者打开相册选取图片。
2. 前期准备
(1)添加权限
在Android应用中访问摄像头和外部存储需要特定的权限。打开`AndroidManifest.xml`文件,需要添加以下两行权限:
```xml
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
`CAMERA`权限允许应用使用设备的摄像头,而`WRITE_EXTERNAL_STORAGE`权限则允许写入外部存储,以便保存拍摄的照片。
(2)添加依赖
为了方便地加载和显示图片,我们将使用Glide库和UtilCode库。打开`app/build.gradle`文件,在dependencies块中添加以下依赖:
```gradle
implementation 'com.github.bumptech.glide:glide:4.9.0'
api 'com.blankj:utilcode:1.23.7'
```
添加后记得点击右上角的“Sync Now”同步项目。
3. 布局界面 (`activity_main.xml`)
布局文件定义了一个LinearLayout,包含一个ImageView和一个Button。ImageView用于显示图片,Button用于触发调用摄像头或相册的操作:
```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ImageView
android:id="@+id/imageView_cam"
android:layout_width="match_parent"
android:layout_height="200dp"
android:src="@mipmap/ic_launcher_round"
android:layout_gravity="center" />
<Button
android:id="@+id/button_cam"
android:layout_width="match_parent"
...
/>
</LinearLayout>
```
4. 实现代码逻辑
在`MainActivity`类中,我们需要监听Button的点击事件,并处理相应的操作。首先,初始化ImageView和Button,然后为Button设置OnClickListener。在点击事件中,你可以使用Intent来启动相机应用或相册应用:
```java
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.imageView_cam);
button = findViewById(R.id.button_cam);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent;
if (UtilPermissionUtils.hasPermissions(MainActivity.this, Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// 检查权限已获取,直接启动相机
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
} else {
// 如果没有权限,请求权限
UtilPermissionUtils.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
return;
}
// 启动相册
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, REQUEST_CODE_SELECT_IMAGE);
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_CODE_CAMERA) {
// 从相机获取图片
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
Glide.with(this).load(imageBitmap).into(imageView);
} else if (requestCode == REQUEST_CODE_SELECT_IMAGE) {
// 从相册选择图片
if (data != null) {
Uri selectedImage = data.getData();
Glide.with(this).load(selectedImage).into(imageView);
}
}
}
}
}
```
在这个例子中,我们首先检查是否已经获取了必要的权限。如果权限已获准,我们启动相机应用。如果用户从相册选择图片,我们会使用`onActivityResult`方法处理返回的结果。
通过以上步骤,你就成功实现了在Android应用中调用摄像头和相册的功能。用户点击按钮后,可以选择拍照或打开相册,选取的图片会显示在ImageView中。这个案例为实际开发中的类似需求提供了基础模板,可以根据具体需求进行扩展和定制。
2019-06-01 上传
2020-03-10 上传
2022-07-13 上传
2021-07-16 上传
2018-01-13 上传
撩得Android一次心动
- 粉丝: 1640
- 资源: 8
最新资源
- 开源通讯录备份系统项目,易于复刻与扩展
- 探索NX二次开发:UF_DRF_ask_id_symbol_geometry函数详解
- Vuex使用教程:详细资料包解析与实践
- 汉印A300蓝牙打印机安卓App开发教程与资源
- kkFileView 4.4.0-beta版:Windows下的解压缩文件预览器
- ChatGPT对战Bard:一场AI的深度测评与比较
- 稳定版MySQL连接Java的驱动包MySQL Connector/J 5.1.38发布
- Zabbix监控系统离线安装包下载指南
- JavaScript Promise代码解析与应用
- 基于JAVA和SQL的离散数学题库管理系统开发与应用
- 竞赛项目申报系统:SpringBoot与Vue.js结合毕业设计
- JAVA+SQL打造离散数学题库管理系统:源代码与文档全览
- C#代码实现装箱与转换的详细解析
- 利用ChatGPT深入了解行业的快速方法论
- C语言链表操作实战解析与代码示例
- 大学生选修选课系统设计与实现:源码及数据库架构