5.3 调用摄像头和相册——案例文档.pdf

preview
需积分: 0 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开发中的关键步骤。通过这个案例,开发者可以学习如何在自己的应用中实现调用摄像头和相册的基本功能。