Android选择图片功能

最近在做应用的时候,遇到了需要选择图片上传头像的需求。本着代码搬运工的精神,在网上浏览了一圈,发现解决办法都大致如下:

Intent intentFromGallery = new Intent();intentFromGallery.setType("image"); // 设置文件类型
intentFromGallery.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intentFromGallery, IMAGE_REQUEST_CODE);

然后在onActivityResult里面做回调处理:

@Overridepublic
 void onActivityResult(int requestCode, int resultCode, Intent data) {
    //结果码不等于取消时候
    if (resultCode != 0) {
        switch (requestCode) {
            case IMAGE_REQUEST_CODE:
                //选取图片之后,传递图片地址做图片剪裁处理
                startPhotoZoom(data.getData());
                break;
            case RESULT_REQUEST_CODE:
                if (data != null) {
                    getImageToView(data);
                }
                break;
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

在onActivityResult回调的时候,判断如果图片选择完成。通过获取返回的数据里面的图片地址来对图片进行处理(我这里是调用startPhotoZoom对图片进行剪裁)。

问题1:

这种发送广播的方式,通常会出现多个广播接收者需要选择,这种用户体验并不是很好。

问题2:

在某些机型上(我用的是华为荣耀4C,Android4.4.2)会出现图片加载失败,断点检查之后发现原本选择的图片URL:content://com.android.providers.media.documents/document/image/3A5323变成了content://com.android.providers.media.documents/document/image%3A5323最后一个文件路径符合变成了“%”。所以导致用该URL加载图片的时候失败。

解决办法:

Intent intentFromGallery = new Intent(Intent.ACTION_PICK,
                               android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);//                         
startActivityForResult(intentFromGallery,IMAGE_REQUEST_CODE);

通过这种方式不仅可以直接打开系统的选择图片Activity,而且能正确的返回图片的URL。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,569评论 25 708
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,554评论 0 17
  • 1.什么是Activity?问的不太多,说点有深度的 四大组件之一,一般的,一个用户交互界面对应一个activit...
    JoonyLee阅读 5,764评论 2 51
  • 如果,把所有在爱里,受过的苦, 当成,要还的债。 也就不难理解,为什么, 被爱的,要比爱的人快乐的多。 被爱着,享...
    张扬北路阅读 236评论 1 2
  • 愿你不再彷徨愿你眼中总有光芒愿你活成你想要的模样
    摄影师柳丁阅读 162评论 0 3