Android实现调用系统相册和拍照的Demo示例
项目背景
在Android应用开发中,用户经常需要从设备中选择图片或拍摄新照片,本Demo将展示如何通过Intent机制调用系统的相册和相机功能,并处理返回的图片数据。
环境准备
Android Studio: 确保已安装最新版本的Android Studio。
SDK版本: API Level 21 (Lollipop) 及以上。
权限配置: 需要在AndroidManifest.xml
中声明相机和存储权限。
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
3. 布局文件 (activity_main.xml)
创建一个简单的界面,包含一个按钮用于触发选择图片的操作,一个ImageView用于显示选中的图片。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/btnSelectImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="选择图片" android:layout_centerHorizontal="true" android:layout_marginTop="50dp"/> <ImageView android:id="@+id/imgView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/btnSelectImage" android:layout_marginTop="20dp" android:scaleType="fitCenter"/> </RelativeLayout>
MainActivity.java
4.1 变量定义与初始化
private static final int PICK_IMAGE_REQUEST = 1; private static final int REQUEST_IMAGE_CAPTURE = 2; private ImageView imageView; private Uri imageUri;
4.2 onCreate方法
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = findViewById(R.id.imgView); Button btnSelectImage = findViewById(R.id.btnSelectImage); btnSelectImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showPictureDialog(); } }); }
4.3 显示选择图片对话框的方法
private void showPictureDialog() { AlertDialog.Builder pictureDialog = new AlertDialog.Builder(this); pictureDialog.setTitle("选择图片来源"); String[] pictureDialogItems = {"相册", "相机"}; pictureDialog.setItems(pictureDialogItems, (dialog, which) -> { switch (which) { case 0: choosePhotoFromGallery(); break; case 1: takePhotoFromCamera(); break; } }); pictureDialog.show(); }
4.4 从相册选择图片的方法
private void choosePhotoFromGallery() { Intent galleryIntent = new Intent(Intent.ACTION_PICK, ANDROID_CONTENT_URI); startActivityForResult(galleryIntent, PICK_IMAGE_REQUEST); }
4.5 从相机拍照的方法
private void takePhotoFromCamera() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (intent.resolveActivity(getPackageManager()) != null) { imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues()); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } else { Toast.makeText(this, "设备不支持相机功能", Toast.LENGTH_SHORT).show(); } }
4.6 onActivityResult方法处理返回结果
@Override protected void onActivityResult(int requestCode, resultCode, data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { if (requestCode == PICK_IMAGE_REQUEST || requestCode == REQUEST_IMAGE_CAPTURE) { imageView.setImageURI(imageUri); } } else if (resultCode == RESULT_CANCELED) { Toast.makeText(this, "操作取消", Toast.LENGTH_SHORT).show(); } }
运行效果
启动应用后,点击“选择图片”按钮会弹出一个对话框,用户可以选择从相册选取图片或使用相机拍照,选定图片后,图片将在下方的ImageView中显示。
本Demo展示了如何在Android应用中集成系统相册和相机功能,使用户能够方便地选择或拍摄图片,通过Intent机制,我们可以轻松调用系统提供的服务,而无需编写复杂的代码,我们还学习了如何处理用户的选择结果,并在界面上显示选定的图片。
以上内容就是解答有关“Android实现调用系统相册和拍照的Demo示例”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。