Android获取并显示相册照片:权限与API实现

0 下载量 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调用、结果处理以及根据系统版本差异进行兼容性处理。通过这些步骤,用户可以方便地在你的应用中选择和展示图片。