Android 如何从系统图库中选择图片

Android之附加图片2—— 从系统图库中选择图片 上一篇博客讲述了模仿微信图片选择器来附加图片,本篇就来讲述直接从系统图库中选择图片。具体功能如下: (1)从手机图库中最多选择3张图片,每次只能选择一张; (2)选择的图片可以点击移除然后再添加新图片; 本博客主要实现的是以上功能,其他诸如主界面布局、各种控件添加和提交功能等旨在说明问题,只做了简单处理,重点在图片选择添加部分。 截图如下: 在这里提供源码下载地址,有兴趣的读者可 阅读详情

这几天我都在做Android的App,同时学习它的API,我将分享一些我学到的东西,比如: 如何从系统图库中选择图片。

首先,让我们来看看如何将手机系统图库集成到你的App中,然后再从图库中选择图片来做一些事。例如,在Facebook的App,你就可以直接选择手机上的图片上传到你的个人资料。

让我们来做一个简单例子,要求:

  1. 屏幕上显示一个按钮和图片视图控件。
  2. 点击“载入图片”按钮,将用户重定向到Android的图片库,在那里可以选择一个图片。
  3. 一旦图片被选中,图片将在主屏幕上的图片视图控件中显示。

让我们开始。

步骤1:创建基本的Android项目

在Eclipse中,点击New > Project > Android Project,给项目取名为“ImageGalleryDemo”,然后选择Android2.1或sdk 7。

一旦这一步完成,你将看到一个基本的hello world程序。

步骤2:修改布局文件

在我们的例子中,我们需要一个简单的布局:一个ImageView控件来显示我们选中的图片,一个Button控件点击重定向到手机图库。

在项目中打开layout/main.xml,然后替换成下面的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView
        android:id="@+id/imgView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"></ImageView>
    <Button
        android:id="@+id/buttonLoadPicture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:text="Load Picture"
        android:layout_gravity="center"></Button>
</LinearLayout>

步骤3:编写重定向到图片库的代码

现在我们需要写一些Java代码来处理按钮的点击事件,而重定向到图片库的代码如下:

Intent i = new Intent(
Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  
startActivityForResult(i, RESULT_LOAD_IMAGE);

注意:这里要传一个整形的常量RESULT_LOAD_IMAGE到startActivityForResult()方法。

步骤4:获取选中的图片

一旦用户选择了一张图片,onActivityResult()方法将会被调用。我们需要处理这个方法得到的数据,代码如下:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
 
    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };
 
        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();
 
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();
 
        // String picturePath contains the path of selected Image
}

注意:onActivityResult()方法只有当图片被选中后才会调用。在这个方法中,我们需要检查requestCode是否是我们之前传给startActivityForResult()方法的RESULT_LOAD_IMAGE。

最终代码
ImageGalleryDemoActivity类的最终代码如下:

package net.viralpatel.android.imagegalleray;
  
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
  
public class ImageGalleryDemoActivity extends Activity {
  
    private static int RESULT_LOAD_IMAGE = 1;
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
  
        Button buttonLoadImage = (Button) findViewById(R.id.buttonLoadPicture);
        buttonLoadImage.setOnClickListener(new View.OnClickListener() {
  
            @Override
            public void onClick(View arg0) {
  
                Intent i = new Intent(
                        Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  
                startActivityForResult(i, RESULT_LOAD_IMAGE);
            }
        });
    }
  
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
  
        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };
  
            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();
  
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();
  
            ImageView imageView = (ImageView) findViewById(R.id.imgView);
            imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
  
        }
  
    }
}

程序截图

第一屏:用户将重定向到手机图库

http://

用户从图库选择图片

在我们的App显示用户选中的图片


源代码:ImageGalleryDemo.zip (46 KB)



TwinCAT3新手必看:5分钟搞定EtherCAT从站PDO动态配置(附电流变量添加技巧) 本文为TwinCAT3新手提供了EtherCAT从站PDO动态配置的快速入门指南。文章详细解析了Process Data Object(PDO)在实时数据交换中的核心作用,并分步演示了在TwinCAT3工程中扫描从站、动态添加与映射PDO(包括接收PDO和发送PDO)的完整操作流程。重点分享了如何灵活添加并监控如电机实际电流等关键工艺变量的高级技巧,并针对不同品牌驱动器的兼容性问题提供了实用的调试心法和解决方案,帮助工程师快速上手并优化工业自动化系统。 阅读详情

相关推荐

深入解析WIFI与蓝牙模块电路设计:从原理到实战

本文深入解析了WIFI与蓝牙模块的电路设计,从核心原理到实战应用。文章以AP6256模块为例,详细拆解了电源树、时钟电路、接口设计及天线射频路径等关键环节,并提供了PCB布局布线的实用准则与调试方法,旨在帮助硬件工程师设计出稳定可靠的无线产品,规避常见陷阱。

weixin_29186249的博客 150

android打开系统图库终极适配

android中调用系统图库本来是一个很基本的东西,几乎每个app都用的到(最基本的更换用户头像),网上的相关内容很多,本来找了几篇看了一下,拿几台测试机试了一下感觉就没什么问题了,但是适配问题慢慢就来了。 一.打开图库的基本方法。 通过查询资料,调用系统图库基本有3种方法。 1.使用Intent.ACTION_PICKIntent i = new Intent(Intent.ACTION_

nbalichaoq的专栏 8242

解决 python2.7中 ImportError: No module named Crypto.Signature

我的解决办法,先查看有没有安装 pip,直接执行pip 回车 没有出现null什么的就安装了,如果没有安装去其他博客哪里看一下,正常情况是默认就有的,然后使用。发现我自己也不会啊,就百度看看,想着网上的解决方法一大片,但是都是废话,能用的没有几个,而且能安装的没有几个。这个里面的python2、3就是系统里面的python版本,直接跟我这样就可以了除非版本不一样,也就是没有这个版本。就可以使用了,第一个应该是卸载之前的,然后重新安装,我的就是这样解决的。就比如我的,我现在使用的 python2.7。

记录一下 1610

android 版本图片,Android开发:调用系统图库选择图片

方法://调用系统图库选择图片public Intent selectPicture(){Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);return intent;}使用://第二个参数:1,用来表示是哪一个startActiv...

weixin_39557813的博客 330

IBM System x3650 M5 IMM配置

1、IMM基本介绍 IMM,全称是Intel Mobile Module是IBM服务器上的集成管理模块,该模块是独立于服务器系统,可以通过一个单独的IP地址,使用Web和虚拟端口方式直接启动、停止和管理远程服务器,即使主板、处理器或者内存故障导致主机无法启动,也依然可以远程管理服务器,可以远程直接操作启动画面和服务器工作界面。 2、IP地址配置 2.1 通过Web方式修改IP地址 IBM服...

血饮渊虹的博客 4万+

手把手教你完成基于YOLOv8的水果/商品/食堂/蔬菜/饮料/书籍识别与计价系统,前台+后台管理系统

手把手教你完成基于YOLOv8的商店的水果/商品/食堂/蔬菜/饮料/书籍识别与计价系统,前台+后台管理员系统,可进行目标检测的操作和展示,实现对图片、视频和摄像头的实时目标检测

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2456

android打开图库,Android 7.0 以上通过系统图库打开图片的方法

报错:android.os.FileUriExposedException: file:///storage/emulated/0/photo.jpeg exposed beyond app through ClipData.Item.getUri()解决public class MainActivity extends AppCompatActivity {@Overrideprotected ...

weixin_42316079的博客 1138

【Halcon-1D测量】measure_pairs 函数功能(用于提取垂直于矩形/环形弧主轴的直边对)

HALCON算子measure_pairs是1D测量模块的基础工具,专用于提取垂直于矩形/环形弧主轴的直边对。该算子通过振幅阈值和灰度过渡规则(如positive/negative)进行边对分组,支持_strongest后缀选择最强边缘避免误配对。输出包含边缘坐标、振幅及内外间距(IntraDistance/InterDistance)。关键限制包括仅适用于直边、Sigma需≤0.5×测量长度,且忽略图像域。相比模糊版本算子,它更适用于边缘清晰的简单场景(如电子元件间距测量)。典型应用需配合gen_meas

weixin_45590420的博客 303

android调用系统拍照或图库流程图,Android开发模板代码(一)——简单打开图库选择照片...

//检查权限public voidcheckPermission() {if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this...

weixin_32827751的博客 252

IDEA出现闪退或打不开的解决方法

本身项目比较大,为了打开这个软件,可调节IDEA中安装的bin目录下有个。打开IDEA的时候过一会便闪退,可以再IDEA的右下角看到如下提示。(如果没有该提示,软件右下角也会有个红色感叹号,点开查看原因即可)闪退的多数原因大致是out of memory,内存溢出。查看任务管理器中的进程:(发现内存随时有溢出的情况)但也需要注意,该参数并不是越大越好,适中即可。只有个别原因是需要管理员权限就可执行!可以尽量减少软件的启动。

码农研究僧的博客 5943

uniapp - [微信小程序 | 安卓苹果app] 详细实现接入天地图完整流程,提供显示地图、IP 属地定位 / 用户定位的城市名称、用户定位的经纬度超多功能(复制运行示例代码,详细注释及常见问题)

uni-app,微信小程序,安卓app,苹果app,App端,支付宝小程序,nvue,天地图,国家天地图api,接入使用天地图,uniApp小程序端接入天地图,uniapp安卓苹果app端接入天地图,微信小程序平台如何引入天地图,天地图Api使用教程,如何在uniapp里集成天地图,使用天地图获取当前定位,天地图api教程,天地图官方文档,天地图详细使用教程,Uniapp项目如何使用天地图,项目引入天地图配置及使用教程,使用天地图获取用户定位,天地图获取用户当前位置信息(经纬度),如何通过天地图拿到用户定位

🏆 前端领域优质创作者 1万+

Android开发:调用系统图库选择图片

方法: //调用系统图库选择图片 public Intent selectPicture() { Intent intent = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_UR...

侠亦狐的博客 3916

OpenStack 之 Epoxy版本 部署实战

OpenStack Epoxy 是 OpenStack 的第 31 个版本,其版本号为 2025.1,于 2025 年 4 月 2 日正式发布。

求知若渴,虚心若愚。 235

android 从系统图库中选择图片

Android 如何从系统图库中选择图片普惠云计算,云服务器降破底价,30元/月起>>>    1 收藏(63) 这几天我都在做Android的App,同时学习它的API,我将分享一些我学到的东西,比如: 如何从系统图库中选择图片。 首先,让我们来看看如何将手机系统图库集成到你的App中,然后再从图库中选择图片来做一些事。例如,在Facebook的App,你就可以直接选择手机上的图

tiankongtiankong01的博客 2080

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

安卓调用系统的图库选择图片并获取Uri路径

addImg.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(images.size()>=5){ Toast.makeText(getApplicationContext(), "您不能再添加图片了", Toast.LENGTH_

黎明踏浪的专栏 2765

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android 4.4从图库选择图片,安卓6.0,从系统图库选择照片,裁剪,并显示的问题。...

问题是:当我点击选择按钮时,确实跳到图库。但是选择完照片,却没有跳转到裁剪界面?这是为什么?代码逻辑有问题吗?全局变量:private Uri chooseUri;//对按钮监听,跳转到图库,并选择照片进项裁剪,并将照片保存为choose_image.jpgchoose_photo.setOnClickListener(new View.OnClickListener() {@Overridepu...

weixin_39636079的博客 149

android开发选择图片,Android开发从系统图库中选择一张图片的方法

刚开始学习OpenCv4Android编程,做了个小demo。就是一个主界面上添加一个ImageView 两个Button控件。一个Button用来从系统相册选择一张照片;另一个Button是用来完成灰度化的功能;在开发过程中遇到Android从系统图库中选择一张图片的问题,查阅了一些资料我将自己的办法贴在下面。步骤1:编写重定向到图片库的代码我们需要写一些Java代码来处理按钮的点击事件,而重定...

weixin_36381252的博客 1053

Android从系统图库中选择图片的源代码

这几天我都在做Android的App,同时学习它的API,我将分享一些我学到的东西,比如: 如何从系统图库中选择图片。 这几天我都在做Android的App,同时学习它的API,我将分享一些我学到的东西,比如: 如何从系统图库中选择图片。 首先,让我们来看看如何将手机系统图库集成到你的App中,然后再从图库中选择图片来做一些事。例如,在Facebook的App,你就可以直接选择

wzh3288的博客 1091

如何调用Android系统图库中选择图片(转)

    如何调用Android系统图库中选择图片:点击

iteye_517的博客 167

工业级SPI隔离通信方案:MAX14431BAEE+与MKV46F256VLH16实战

SPI总线作为板级高速全双工通信协议,在工业现场常面临地电位差和电磁干扰导致的数据误码与芯片损坏问题。数字隔离器通过磁耦或电容耦合技术,在收发两端建立电气隔离栅,有效阻断共模电压和浪涌路径,同时保持纳秒级传播延迟和数十Mbps速率。在电机控制、远程IO和传感器采集等场景中,隔离SPI链路可显著提升通信可靠性。本文以MAX14431BAEE+四通道数字隔离器与MKV46F256VLH16工业MCU组合为例,详解通道方向匹配、速率余量计算、电源与地处理及PCB布局要点,并给出DMA批量传输与误码率测试的工程实践

weixin_34082695的博客 361
上一篇: 2013.1.9
下一篇: Java中遭遇NaN
kerwin612
博客等级 码龄14年 28粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值