Android开发中,有时需要让用户选取一张手机中的图片,但为此自定义一个图片选择器又有点麻烦。其实Android已经为开发者提供了相应的快捷解决方法。本文将介绍如何选取图片并返回URI。
一共有两步:
①为指定的按钮添加选取图片操作的监听器,也就是设置按钮点击后程序便打开图库让用户选取图片;
选取图片按钮的监听器的 onClick 方法中的代码:
Intent intent = new Intent(Intent.ACTION_PICK, Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, ResourceTool.RESULT_LOAD_IMAGE);
首先解释 Intent(Intent.ACTION_PICK, Images.Media.EXTERNAL_CONTENT_URI) 的参数。第一个参数 Intent.ACTION_PICK,这是一个字符串常量,意思就是“执行选取操作”。第二个参数 Images.Media.EXTERNAL_CONTENT_URI 也是字符串常量,这个常量指定了选取的内容,即“外部存储中的图片”。两个参数结合起来的意思就是“从外部存储中选取图片”。改变第二个参数我们还能选取手机里的联系人或别的什么东西,这里就不细说了。
然后,下面的startActivityForResult和我们常用的startActivity不太一样,多了一个参数。后面的这个 ResourceTool.RESULT_LOAD_IMAGE 是我的程序中自定义的一个常量,你也可以随意指定一个int类型的数。这个数是几并不重要,但一定要和回调方法中的参数一致(下面会讲到)。
②为图片选取完成的返回事件设置回调方法,也就是告诉程序在图片选取后要做什么。
回调方法的添加位置比较蛋疼,并不是添加在按钮的onClick中,更不是添加到上面的Intent中,而是添加到整个Activity。在执行图片选取操作的Activity中重写 onActivityResult 方法:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == ResourceTool.RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { Uri selectedImage = data.getData(); // selectedImage就是选取的图片的URI,怎么处理就随你了 } }
如果这个Activity中仅有一个 startActivityForResult 的类型(例如选取图片),那么这里的 requestCode == ResourceTool.RESULT_LOAD_IMAGE 也可以不填。但如果你要执行两种或者更多的操作(例如一个按钮是选取图片,而另一个按钮是选取联系人),那么就要注意 requestCode 和前面的 startActivityForResult 一定要一一对应,否则程序就要不听话了。
浙公网安备 33010602011771号