Android获取并显示相册照片:权限与API实现
64 浏览量
更新于2024-08-30
收藏 72KB PDF 举报
在Android应用开发中,实现从系统相册选择照片并返回的功能是一个常见的需求。本文将详细介绍如何在AndroidManifest.xml中添加权限、构建Intent以启动系统相册选择器,以及处理用户选择的照片并显示在ImageView中的过程。
首先,为了进行读取外部存储的文件操作,必须在AndroidManifest.xml文件中添加相应的权限声明,因为从4.4 KitKat版本开始,Android对读取外部存储进行了区分处理。权限声明如下:
```xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
```
这里有两个相同的权限声明,这是因为Android应用可能需要在不同组件间共享访问权限,确保每个需要使用该权限的地方都有声明。
接下来,你需要创建一个Intent来调用系统相册。在Java代码中,使用`ACTION_GET_CONTENT`动作打开相册,并指定数据类型为图片("image/*"):
```java
private static final int CHOOSE_PHOTO = 0;
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, CHOOSE_PHOTO);
```
`startActivityForResult()`方法用于发起一个非同步操作,并等待结果。当用户选择照片后,系统会通过`onActivityResult()`回调通知你的应用。
在回调函数中,你需要处理`requestCode`和`resultCode`,如果请求的结果码`RESULT_OK`表明用户成功选择了照片,你可以进一步获取到所选图片的Uri:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case CHOOSE_PHOTO:
if (resultCode == RESULT_OK) {
Bitmap bitmap = null;
// 根据系统版本判断使用不同的方法处理图片
if (Build.VERSION.SDK_INT >= 19) {
// 对于Android 4.4及以上的系统,使用 ImgUtil.handleImageOnKitKat() 处理
bitmap = ImgUtil.handleImageOnKitKat(this, data);
} else {
// 对于4.4以下的系统,使用 ImgUtil.handleImageBeforeKitKat() 方法
bitmap = ImgUtil.handleImageBeforeKitKat(this, data);
}
// 将图片设置到ImageView上
ImageView imageView = findViewById(R.id.imageView);
imageView.setImageBitmap(bitmap);
}
break;
}
}
```
`handleImageOnKitKat()`和`handleImageBeforeKitKat()`是自定义工具类(ImgUtil)的方法,分别针对不同版本的Android处理返回的Uri,可能涉及到解码、压缩、缓存等操作,以确保图片质量和性能。例如,对于API 19及以上,你可能需要使用`InputStream`和`BitmapFactory.decodeStream()`来读取图片,而API 19以下则可以使用传统的`ContentResolver.openInputStream()`方法。
实现Android选择相册照片并返回功能的核心在于权限声明、Intent调用、结果处理以及根据系统版本差异进行兼容性处理。通过这些步骤,用户可以方便地在你的应用中选择和展示图片。
416 浏览量
1494 浏览量
212 浏览量
212 浏览量
470 浏览量
104 浏览量
139 浏览量
150 浏览量
weixin_38681318
- 粉丝: 2
- 资源: 888
最新资源
- Applied-ML-Algorithms:一个采用泰坦尼克号数据集并在scikit-learn和超参数调整中使用不同ML模型的ML项目
- Spring_2021
- Tolkien
- cot_tracker:交易者数据追踪器的承诺
- http-factory-diactoros:为Zend Diactoros实现的HTTP工厂
- 酒保:酒保-PostgreSQL备份和恢复管理器
- tpwriuzv.zip_归一化时域图
- TPF U13
- TicTaeToeOnline
- Large-scale Disk Failure Prediciton Dataset-数据集
- aim-high:用于设置和跟踪目标的应用
- c#飞机大战期末项目.rar
- Becross
- nrmgqpyn.zip_complex cepstrum
- 适用于Android NDK的功能强大的崩溃报告库。 签出后不要忘记运行git submodule update --init --recursive。-Android开发
- 弹跳旋转器::globe_with_meridians::bus_stop:一个显示弹跳旋转器的Web组件