5.3 调用摄像头和相册——案例文档.pdf
需积分: 0 27 浏览量
更新于2021-07-30
收藏 420KB PDF 举报
在Android应用开发中,调用摄像头和相册是常见需求。本文档提供了一个案例,涵盖了学习如何在Android应用中实现这一功能的基本知识和操作步骤。
知识点一:权限配置
在Android开发中,使用摄像头和访问存储需要声明相应的权限。具体权限包括:
- CAMERA(相机权限):android.permission.CAMERA
- WRITE_EXTERNAL_STORAGE(写外部存储权限):android.permission.WRITE_EXTERNAL_STORAGE
开发者需要在应用的配置文件AndroidManifest.xml中声明这些权限。示例如下:
```xml
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
```
知识点二:添加依赖
在Android项目中,常常需要使用第三方库来简化开发流程,提高开发效率。文档中提到了两个库:
- Glide:一个高效的图片加载库,用于加载、缓存和展示图片。
- utilcode:一个实用工具类库,提供了大量通用工具方法。
在项目的build.gradle文件中添加这些库的依赖,以便在项目中使用它们提供的功能。配置如下:
```gradle
implementation 'com.github.bumptech.glide:glide:4.9.0'
api 'com.blankj:utilcode:1.23.7'
```
添加完依赖后,需要点击“Sync Now”同步项目,确保依赖被正确加载。
知识点三:布局界面设计
本案例使用了LinearLayout作为根布局,并在其中放置了两个按钮和两个ImageView控件,分别用于拍照和从相册选择图片。布局文件activity_main.xml如下:
```xml
<LinearLayout xmlns:android="***"
xmlns:app="***"
xmlns:tools="***"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<!-- ImageView用于显示拍照后的图片 -->
<ImageView android:id="@+id/imageView_cam"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
android:src="@mipmap/ic_launcher_round" />
<!-- 拍照按钮 -->
<Button android:id="@+id/button_cam"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="拍照"
android:textColor="#000000"
android:textSize="30sp" />
<!-- ImageView用于显示从相册选择的图片 -->
<ImageView android:id="@+id/imageView_photo"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
android:src="@drawable/ic_launcher_background" />
<!-- 从相册选择按钮 -->
<Button android:id="@+id/button_photo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="从相册选择"
android:textColor="#000000"
android:textSize="30sp" />
</LinearLayout>
```
知识点四:MainActivity类
MainActivity类负责处理按钮点击事件,以及启动对应的意图(Intent)来调用系统相机或相册。以下是简化的MainActivity.java代码:
```java
package com.example.zsphoto;
import android.content.Intent;
***.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
// 定义控件ID
private static final int REQUEST_IMAGE_CAPTURE = 1;
private static final int REQUEST_IMAGE_PICK = 2;
private ImageView imageView_cam;
private ImageView imageView_photo;
private Button button_cam;
private Button button_photo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化控件
imageView_cam = findViewById(R.id.imageView_cam);
imageView_photo = findViewById(R.id.imageView_photo);
button_cam = findViewById(R.id.button_cam);
button_photo = findViewById(R.id.button_photo);
// 为拍照按钮设置点击监听器
button_cam.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 启动系统相机应用拍照
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
});
// 为从相册选择图片按钮设置点击监听器
button_photo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 启动系统相册选择图片
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, REQUEST_IMAGE_PICK);
}
});
}
// 重写onActivityResult方法,处理拍照和选择图片的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
// 获取拍照后的图片并展示
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
imageView_cam.setImageBitmap(imageBitmap);
}
if (requestCode == REQUEST_IMAGE_PICK && resultCode == RESULT_OK) {
// 获取从相册选择的图片并展示
Uri selectedImageUri = data.getData();
imageView_photo.setImageURI(selectedImageUri);
}
}
}
```
代码中定义了两个常量REQUEST_IMAGE_CAPTURE和REQUEST_IMAGE_PICK,用于标识不同请求。此外,定义了两个方法onCreate和onActivityResult分别用于初始化控件和处理回调结果。
以上便是本文档所提供的案例中涉及的主要知识点,涵盖了从配置权限,添加依赖,设计布局,编写逻辑代码等Android开发中的关键步骤。通过这个案例,开发者可以学习如何在自己的应用中实现调用摄像头和相册的基本功能。
撩得Android一次心动
- 粉丝: 1707
- 资源: 8
最新资源
- bcprov-jdk15on-1.50.zi
- (7151648)记事本源代码
- 深入探讨HTTP协议的核心功能及其安全性解决方案
- 用digital实现D触发器
- 视频游戏检测30-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar
- 皮带滚筒式双向移载机sw12可编辑全套技术资料100%好用.zip
- fdjslkfjkldsjgkklfdg
- EMC整改过程分享+EMC测试项+EMC优化方案+EMC验证结果
- 瓶盖打码分拣机sw18可编辑全套技术资料100%好用.zip
- 牛奶激光打码夹持自动化设备sw18可编辑全套技术资料100%好用.zip
- 机器故障数据集.zip
- windows组策略组策略分享
- 气动真空上料机sw17全套技术资料100%好用.zip
- 谷物盒、牛奶纸箱、苏打水检测14-YOLO(v5至v11)、COCO、Paligemma数据集合集.rar
- proxy arp自动配置-打开-适用于openwrt
- 基于粒子群算法的配电网重构 基于IEEE33节点电网,以网损和电压偏差最小为目标,考虑系统的潮流约束,采用粒子群算法求解优化模型,得到确保放射型网架的配电网重构方案 这个程序主要是一个潮流计算程序