个人信息界面(二)
目标:点击头像打开系统自带相册
参考:android打开系统图库终极适配,Android个人中心的头像上传,图片编码及截取
android中调用系统图库本来是一个很基本的东西,几乎每个app都用的到(最基本的更换用户头像),网上的相关容很多,本来找了几篇看了一下,拿几台测试机试了一下感觉就没什么问题了,但是适配问题慢慢就来了。
一.打开图库的基本方法。
通过查询资料,调用系统图库基本有3种方法。
1.使用Intent.ACTION_PICK
程序:
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media. EXTERNAL_CONTENT_URI); //调用android的图库
//i.setType("image/*");//不可设置type,否则noactivityfound
startActivityForResult(Intent. createChooser(i,null) , 2) ;
这个intent在android6.0以下是可以用的,但是到了6.0就无效了,具体打印log忘记了,官方文档也只用了这
Intent来获取留联系人,所以pass掉。
2.使用Intent.ACTION_GET_CONTENT
程序:
action_get_content是通过intent中设置的type属性来判断具体调用哪个程序的。官方文档上说,这个intent是用来“检索一个特定类型的文件”并且回返回检索到的文件的一个引用(文件的copy)这个貌似是可以用的,而且也是大多数人选择。
3.使用Intent.ACTION_OPEN_DOCUMENT
程序:
这个action只支持4.4以上的版本。官方文档上说,这个intent是用来“打开一个特定类型的文件”,与检索相比,感觉跟适合我们的应用场景。同样可以使用EXTRA_ALLOW_MULTIPLE来支持多选。这个貌似更适合,只是需要判断sd版本,4.4及以上使用ACTION_OPEN_DOCUMENT,4.3及以下用Intent.ACTION_GET_CONTENT,这也是一些比较好的攻略
4.常见的Activity Action Intent常量用法
①调用图库,获取所有本地图片:
Intent imageIntent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
imageIntent.setType("image/*");
startActivityForResult(imageIntent,PICK_CODE); //PICK_CODE是常量
②调用本地联系人:
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
startActivityForResult(intent,PICK_CONTACT);
或者:
金乐demo1例子③调用音乐,获取所有本地音乐文件:
Intent audioIntent = new Intent(Intent.ACTION_GET_CONTENT);
audioIntent.setType("audio/*");
startActivityForResult(audioIntent,PICK_AUDIO);
④调用视频,获取所有本地视频文件:
Intent videoIntent = new Intent(Intent.ACTION_GET_CONTENT);
videoIntent.setType("video/*");
startActivityForResult(videoIntent,PICK_VIDEO);
⑤打开网页链接,Intent.ACTION_VIEW
金乐demo1例子⑥发送邮件,Intent.ACTION_SENDTO
使用方法