Android调用摄像头与相册实战教程

需积分: 0 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中。这个案例为实际开发中的类似需求提供了基础模板,可以根据具体需求进行扩展和定制。