系统相册既支持只选择一张图片,也支持同时选择多张图片。

跳到系统相册的代码例子如下:

// 创建一个内容获取动作的意图(准备跳到系统相册)
Intent albumIntent = new Intent(Intent.ACTION_GET_CONTENT);
albumIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);  // 是否允许多选
albumIntent.setType("image/*");  // 类型为图像
startActivityForResult(albumIntent, CHOOSE_CODE);  // 打开系统相册
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {super.onActivityResult(requestCode, resultCode, intent);if (resultCode == RESULT_OK && requestCode == CHOOSE_CODE) {  // 从相册返回if (intent.getData() != null) {  // 从相册选择一张照片Uri uri = intent.getData();  // 获得已选择照片的路径对象// 根据指定图片的uri,获得自动缩小后的位图对象Bitmap bitmap = BitmapUtil.getAutoZoomImage(this, uri);iv_photo.setImageBitmap(bitmap);  // 设置图像视图的位图对象} else if (intent.getClipData() != null) {  // 从相册选择多张照片ClipData images = intent.getClipData();  // 获取剪切板数据if (images.getItemCount() > 0) {  // 至少选择了一个文件Uri uri = images.getItemAt(0).getUri();  // 取第一张照片// 根据指定图片的uri,获得自动缩小后的位图对象Bitmap bitmap = BitmapUtil.getAutoZoomImage(this, uri);iv_photo.setImageBitmap(bitmap);  // 设置图像视图的位图对象}}}}

权限:

    <!-- 相机 --><uses-permission android:name="android.permission.CAMERA" /><!-- 录音 --><uses-permission android:name="android.permission.RECORD_AUDIO" /><!-- 存储卡读写 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/btn_choose"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="打开相册选取照片"android:textColor="@color/black"android:textSize="17sp" /><Buttonandroid:id="@+id/btn_combine"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="拍照或从相册选取"android:textColor="@color/black"android:textSize="17sp" /></LinearLayout><ImageViewandroid:id="@+id/iv_photo"android:layout_width="match_parent"android:layout_height="300dp"android:scaleType="fitCenter" /></LinearLayout>

代码:

package com.example.myapplication;import android.content.ClipData;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;import com.example.myapplication.util.BitmapUtil;public class MainActivity extends AppCompatActivity implements View.OnClickListener
{private final static String TAG = "PhotoChooseActivity";private int CHOOSE_CODE = 3; // 只在相册挑选图片的请求码private int COMBINE_CODE = 4; // 既可拍照获得现场图片、也可在相册挑选已有图片的请求码private ImageView iv_photo; // 声明一个图像视图对象@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv_photo = findViewById(R.id.iv_photo);findViewById(R.id.btn_choose).setOnClickListener(this);findViewById(R.id.btn_combine).setOnClickListener(this);}@Overridepublic void onClick(View v){if (v.getId() == R.id.btn_choose){// 创建一个内容获取动作的意图(准备跳到系统相册)Intent albumIntent = new Intent(Intent.ACTION_GET_CONTENT);albumIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); // 是否允许多选albumIntent.setType("image/*"); // 类型为图像startActivityForResult(albumIntent, CHOOSE_CODE); // 打开系统相册}else if (v.getId() == R.id.btn_combine){openSelectDialog(); // 打开选择对话框(要拍照还是去相册)}}// 打开选择对话框(要拍照还是去相册)private void openSelectDialog(){// 声明相机的拍照行为Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);Intent[] intentArray = new Intent[] { photoIntent };// 声明相册的打开行为Intent albumIntent = new Intent(Intent.ACTION_GET_CONTENT);albumIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false); // 是否允许多选albumIntent.setType("image/*"); // 类型为图像// 容纳相机和相册在内的选择意图Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);chooserIntent.putExtra(Intent.EXTRA_TITLE, "请拍照或选择图片");chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);chooserIntent.putExtra(Intent.EXTRA_INTENT, albumIntent);// 创建封装好标题的选择器意图Intent chooser = Intent.createChooser(chooserIntent, "选择图片");// 在页面底部弹出多种选择方式的列表对话框startActivityForResult(chooser, COMBINE_CODE);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent intent){super.onActivityResult(requestCode, resultCode, intent);if (resultCode == RESULT_OK && requestCode == CHOOSE_CODE)    // 从相册返回{if (intent.getData() != null)   // 从相册选择一张照片{Uri uri = intent.getData(); // 获得已选择照片的路径对象Bitmap bitmap = BitmapUtil.getAutoZoomImage(this, uri);   // 根据指定图片的uri,获得自动缩小后的位图对象iv_photo.setImageBitmap(bitmap);    // 设置图像视图的位图对象}else if (intent.getClipData() != null)  // 从相册选择多张照片{ClipData images = intent.getClipData(); // 获取剪切板数据if (images.getItemCount() > 0)   // 至少选择了一个文件{Uri uri = images.getItemAt(0).getUri(); // 取第一张照片// 根据指定图片的uri,获得自动缩小后的位图对象Bitmap bitmap = BitmapUtil.getAutoZoomImage(this, uri);iv_photo.setImageBitmap(bitmap); // 设置图像视图的位图对象}}}if (resultCode == RESULT_OK && requestCode == COMBINE_CODE)    // 从组合选择返回{if (intent.getData() != null)   // 从相册选择一张照片{Uri uri = intent.getData(); // 获得已选择照片的路径对象// 根据指定图片的uri,获得自动缩小后的位图对象Bitmap bitmap = BitmapUtil.getAutoZoomImage(this, uri);iv_photo.setImageBitmap(bitmap); // 设置图像视图的位图对象}else if (intent.getExtras() != null)      // 拍照的缩略图{Object obj = intent.getExtras().get("data");if (obj instanceof Bitmap)   // 属于位图类型{Bitmap bitmap = (Bitmap) obj; // 强制转成位图对象iv_photo.setImageBitmap(bitmap); // 设置图像视图的位图对象}}}}}

BitmapUtil
package com.example.myapplication.util;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.net.Uri;
import android.util.Log;
import java.io.InputStream;public class BitmapUtil
{private final static String TAG = "BitmapUtil";// 获得旋转角度之后的位图对象public static Bitmap getRotateBitmap(Bitmap bitmap, float rotateDegree){Matrix matrix = new Matrix(); // 创建操作图片用的矩阵对象matrix.postRotate(rotateDegree); // 执行图片的旋转动作// 创建并返回旋转后的位图对象return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);}// 获得比例缩放之后的位图对象public static Bitmap getScaleBitmap(Bitmap bitmap, double scaleRatio){int new_width = (int) (bitmap.getWidth() * scaleRatio);int new_height = (int) (bitmap.getHeight() * scaleRatio);// 创建并返回缩放后的位图对象return Bitmap.createScaledBitmap(bitmap, new_width, new_height, false);}// 获得自动缩小后的位图对象public static Bitmap getAutoZoomImage(Context ctx, Uri uri){Log.d(TAG, "getAutoZoomImage uri="+uri.toString());Bitmap zoomBitmap = null;// 打开指定uri获得输入流对象try (InputStream is = ctx.getContentResolver().openInputStream(uri)){// 从输入流解码得到原始的位图对象Bitmap originBitmap = BitmapFactory.decodeStream(is);int ratio = originBitmap.getWidth()/2000+1;// 获得比例缩放之后的位图对象zoomBitmap = BitmapUtil.getScaleBitmap(originBitmap, 1.0/ratio);}catch (Exception e){e.printStackTrace();}return zoomBitmap;}}

多媒体——图片——从相册中选取图片相关推荐

  1. Android从相册中选取图片上传到阿里云OSS

    在开发APP软件中,boss突然提出想在软件中添加一个多张照片上传的功能,作为菜鸟的我,琢磨了两天,才弄出来,今天特地贴出来.本篇博客主要介绍的是将本地图片上传到服务器的方法技巧.主要技术点是: 一. ...

  2. php拍照从手机相册中选择,微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例...

    本文实例讲述了微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法.分享给大家供大家参考,具体如下: 目前中js-sdk 1.0版本中,预览图片提供了2个接口,接口的定义参考官方文档 1.预览 ...

  3. Android6.0动态设置读写权限(Android拍照或从相册中选图片预览出现问题)

    做了一个Android拍照或从相册中选图片传服务器的demo,出现了问题虽然 图片路径 也可以打印出来,然后去看权限那里也申请了读写权限 <uses-permission android:nam ...

  4. android 图库开发实例,Android中从图库中选取图片实例详解

    android 从图库中选取图片 在android中,如何从图库gallary中挑选图片呢,其实很简单,步骤如下 1) 设计一个imageview,用来显示图库选出来的图片 android:orien ...

  5. 微信JS-SDK 分享到朋友圈 分享给朋友 分享到QQ 拍照或从手机相册中选图 识别音频并返回识别结果 使用微信内置地图查看位置

    微信JS-SDK 分享到朋友圈 分享给朋友 分享到QQ 拍照或从手机相册中选图 识别音频并返回识别结果 使用微信内置地图查看位置 一.JS部分 wx.ready(function () {// 1 判 ...

  6. 微信JS接口 分享到朋友圈 分享给朋友 分享到QQ 拍照或从手机相册中选图 识别音频并返回识别结果 使用微信内置地图查看位置

    微信JS接口 微信JS接口 分享到朋友圈 分享给朋友 分享到QQ 拍照或从手机相册中选图 识别音频并返回识别结果 使用微信内置地图查看位置 来源:http://www.cnblogs.com/txw1 ...

  7. Android开发之刷新图片到相册 | 刷新视频到相册的方法区分发广播刷新方法

    我们很多app会有保存图片和保存视频,保存成功后一般在最近文件或者相册就能看到了,这个需要我们在保存文件后自行刷新到相册中,以前老版本方法通过广播刷新方法在API29中已经废弃了无法使用,咱们提供了新 ...

  8. 长按图片 把图片存到相册

    小伙伴们, 这次和大家分享一个很简单的技术, 就是把图片存到相册 首先, 肯定需要一个UIImageView 用于展示图片, 接下来就要用到长按手势, 将长按手势添加到UIImageView上, 代码 ...

  9. iOS-iOS 11图片保存相册权限 NSPhotoLibraryAddUsageDescription

    一.iOS 11图片保存相册权限 NSPhotoLibraryAddUsageDescription NSPhotoLibraryAddUsageDescription是iOS 11新推出的隐私规则, ...

最新文章

  1. YOLO算法最全综述:从YOLOv1到YOLOv5
  2. Andorid中的HAL
  3. delphi中的指针与C类似
  4. 比特币交易手续费_投资人跑步进军比特币,OKEx交易手续费最高打6折
  5. ReviewForJob——深度优先搜索的应用
  6. 程序发出的广播其他程序收不到_RabbitMQ 如何实现对同一个应用的多个节点进行广播...
  7. git常用命令+git规范(附merge合并及冲突解决)
  8. mssql 无法启动调试器 数据为空_Windows无法启动:如何利用PE拯救桌面重要数据?...
  9. python爬虫之路——对斗破苍穹进行关键字提取,制作噪声云图
  10. CLRS2e读书笔记—Chapter10
  11. 手动升级麦咖啡(McAfee)病毒库的步骤
  12. viper4android md,【xposed】微信主题模块(MDWechat)v3.5.0
  13. 笔记本计算机风扇连线,机箱风扇接口怎么接电源线【图文】
  14. openflow通信流程总结
  15. python抓取百度指数详解
  16. 货币转换程序(双符号)python代码_Python语言程序设计作业四货币转换
  17. androidstudio图片居中_Android imageView图片按比例缩放-Fun言
  18. 安卓视频播放,部分手机不能快进
  19. 计算机的真正发明者,楚泽真正的“计算机之父”
  20. C++学习(三十九)(C语言部分)之 游戏项目(2048游戏)

热门文章

  1. 麻省理工学院计算机硕士几年制,2020年麻省理工读研几年
  2. linux待机唤醒_Linux电源管理-休眠与唤醒
  3. 虚拟机安装图形化界面
  4. 红海云签约中国中医药出版社,开启出版行业人力资源数字化新篇章
  5. MySQL树形结构设计
  6. 5G时代来临,前端开发工程师必须了解的音视频入门基础知识
  7. mysql树形结构 无限分类_使用 authenticationDatabase 参数连接 aliyun 上的 MongoDB - SegmentFault 思否...
  8. java中的四种代码块
  9. ajax提交用流的方式,ajax 请求 后台返回的文件流
  10. 支付FM——支付宝收款码配置