android从相册选择照片代码,Android开发实现从相册中选择照片功能详解
本文实例讲述了android开发实现从相册中选择照片功能。分享给大家供大家参考,具体如下:实际效果图:代码实现:1. 权限配置2. 点击事件绑定3. 相册访问4. 根据路径设置图片5. 其他方法权限首先,现在 mainfest.xml 文件中添加以下权限:点击事件点击跳转相册imageview01.setonclicklistener(new view.onclicklistener() {@ov
本文实例讲述了android开发实现从相册中选择照片功能。分享给大家供大家参考,具体如下:
实际效果图:
代码实现:
1. 权限配置
2. 点击事件绑定
3. 相册访问
4. 根据路径设置图片
5. 其他方法
权限
首先,现在 mainfest.xml 文件中添加以下权限:
点击事件
点击跳转相册
imageview01.setonclicklistener(new view.onclicklistener() {
@override
public void onclick(view v) {
if(contextcompat.checkselfpermission(mainactivity.this,
manifest.permission.write_external_storage) != packagemanager.permission_granted){
activitycompat.requestpermissions(mainactivity.this,new string[]{
manifest.permission.write_external_storage
},1);
}
intent intent = new intent(intent.action_pick,
android.provider.mediastore.images.media.external_content_uri);
startactivityforresult(intent, image_request_code);
}
});
不同手机返回图片uri不同,此处进行转换
可以不添加( 如果,不添加,则其他方法也没用 )
@targetapi(19)
private void handleimageomkitkat(intent data){
string imagepath = null;
uri uri = data.getdata();
if (documentscontract.isdocumenturi(this,uri)){
//如果document类型是u日,则通过document id处理
string docid = documentscontract.getdocumentid(uri);
if ("com.android.providers.media.documents".equals(uri.getauthority())){
string id = docid.split(":")[1];//解析出数字格式id
string selection = mediastore.images.media._id + "=" + id;
imagepath = getimagepath(mediastore.images.media.external_content_uri,selection);
}else if ("com.android.providers.downloads.documents".equals(uri.getauthority())){
uri contenturi = contenturis.withappendedid(uri.parse("content://downloads/public_downloads"),long.valueof(docid));
imagepath = getimagepath(contenturi,null);
}
}else if ("content".equalsignorecase(uri.getscheme())){
//如果是普通类型 用普通方法处理
imagepath = getimagepath(uri,null);
}else if ("file".equalsignorecase(uri.getscheme())){
//如果file类型位uri直街获取图片路径即可
imagepath = uri.getpath();
}
displayimage(imagepath);
}
关于方法:onactivityresult()
在这里通过放回路径设置头像,但由于图片路径生成可能有一定延时,所以这里开一个线程等待:
/*定义一个handler,定义延时执行的行为*/
public void chnage(){
new thread(){
@override
public void run() {
while ( bitmap == null ){
bitmap = bitmapfactory.decodefile(path);
log.v("qwe","123");
}
message message = handler.obtainmessage();
message.obj = 0;
handler.sendmessage(message);
}
}.start();
}
其他方法:
private void handleimagebeforekitkat(intent data){
uri uri = data.getdata();
string imagepath = getimagepath(uri,null);
displayimage(imagepath);
}
private string getimagepath(uri uri, string selection){
string path = null;
//通过uri和selection来获取真实图片路径
cursor cursor = getcontentresolver().query(uri, null, selection, null, null);
if (cursor != null){
if (cursor.movetofirst()){
path = cursor.getstring(cursor.getcolumnindex(mediastore.images.media.data));
}
cursor.close();
}
return path;
}
private void displayimage(string imagepath){
if (imagepath != null){
bitmap bitmap = bitmapfactory.decodefile(imagepath);
imageview01.setimagebitmap(bitmap);
}else {
toast.maketext(mainactivity.this,"fail to get image",toast.length_short).show();
}
}
相关变量:
//从相册获得图片
bitmap bitmap;
//判断返回到的activity
private static final int image_request_code = 0;
//图片路径
private string path ;
private handler handler = new handler(){
@override
public void handlemessage(message msg) {
if((integer)msg.obj==0){
imageview01.setimagebitmap(bitmap);
}
super.handlemessage(msg);
}
};
demo源码点击此处本站下载。
希望本文所述对大家android程序设计有所帮助。
更多推荐
所有评论(0)