Android调用摄像头与相册实战教程
需积分: 0 69 浏览量
更新于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中。这个案例为实际开发中的类似需求提供了基础模板,可以根据具体需求进行扩展和定制。
1212 浏览量
312 浏览量
816 浏览量
1120 浏览量
187 浏览量
撩得Android一次心动
- 粉丝: 1709
- 资源: 8
最新资源
- 基于Laravel 8.x的API接口签名认证系统
- PayPal-NET-SDK:用于PayPal RESTful API的.NET SDK
- aireACUMAR:阿卡马尔(ACUMAR)的拿破仑日报
- 广告说服观点
- 基于深度置信网络的多输入单输出回归预测(DBN)(Matlab完整程序和数据)
- decisionmaker:一个微型的Web应用程序,可以帮助您做出决策
- redditclone实践:遵循Spring Boot和Angular教程-通过freeCodeCampprogrammingtechie构建Reddit克隆(编码项目)
- pokemon-weakness-android:Pokemon Weakness的Android应用程序的源代码-Android application source code
- jsonlines:python库可简化jsonlines和ndjson数据的使用
- leetcode答案-EulerFS:欧拉FS
- AmazonS3Client.rar
- go-migrate:用Go编写的抽象迁移框架
- 监控视频.dav文件转码工具,支持转换为多种格式(MP4、AVI、WMV、MXF、GIF、DPG、MTV、AMV、SWF等)
- CM回购
- babel_pug_project:使用babel,pug,node,express进行Web服务器教育
- STNFCSensor_Android:ST NFC Sensor Android应用程序源代码-Android application source code