android中打开相机、打开相册进行图片的获取示例
程序员文章站
2024-02-17 15:43:10
这里介绍在android中实现相机调取、拍照片、获取照片、存储新路径等已经打开相册、选择照片等功能
首先看一下界面,很简单
配置读取内存卡和调用照相头的功能...
这里介绍在android中实现相机调取、拍照片、获取照片、存储新路径等已经打开相册、选择照片等功能
首先看一下界面,很简单
配置读取内存卡和调用照相头的功能
<!-- 使用网络权限 --> <uses-permission android:name="android.permission.internet"/> <!-- 写sd卡的权限 --> <uses-permission android:name="android.permission.write_external_storage"/> <!-- 读sd卡权限 --> <uses-permission android:name="android.permission.read_external_storage"/> <uses-permission android:name="android.permission.mount_unmount_filesystems" />
下面是代码的主题
public class takephotos extends activity implements android.view.view.onclicklistener { button takephoto; bitmap photo; string picpath; button capture; @override protected void oncreate(bundle savedinstancestate) { // todo auto-generated method stub super.oncreate(savedinstancestate); setcontentview(r.layout.activity_photo); takephoto = (button) findviewbyid(r.id.button1); capture = (button) findviewbyid(r.id.capture); takephoto.setonclicklistener(this); capture.setonclicklistener(this); } @override public void onclick(view viewid) { switch (viewid.getid()) { case r.id.button1: {// 打开相机 string state = environment.getexternalstoragestate();// 获取内存卡可用状态 if (state.equals(environment.media_mounted)) { // 内存卡状态可用 intent intent = new intent("android.media.action.image_capture"); startactivityforresult(intent, 1); } else { // 不可用 toast.maketext(takephotos.this, "内存不可用", toast.length_long) .show(); } break; } case r.id.capture: {// 打开相册 // 打开本地相册 intent i = new intent( intent.action_pick, android.provider.mediastore.images.media.external_content_uri); // 设定结果返回 startactivityforresult(i, 2); break; } default: break; } } @override protected void onactivityresult(int requestcode, int resultcode, intent data) { // todo auto-generated method stub super.onactivityresult(requestcode, resultcode, data); if (data != null) { switch (requestcode) { case 1: // 两种方式 获取拍好的图片 if (data.getdata() != null || data.getextras() != null) { // 防止没有返回结果 uri uri = data.getdata(); if (uri != null) { this.photo = bitmapfactory.decodefile(uri.getpath()); // 拿到图片 } if (photo == null) { bundle bundle = data.getextras(); if (bundle != null) { photo = (bitmap) bundle.get("data"); fileoutputstream fileoutputstream = null; try { // 获取 sd 卡根目录 生成图片并 string savedir = environment .getexternalstoragedirectory() + "/dhj_photos"; // 新建目录 file dir = new file(savedir); if (!dir.exists()) dir.mkdir(); // 生成文件名 simpledateformat t = new simpledateformat( "yyyymmddsssss"); string filename = "mt" + (t.format(new date())) + ".jpg"; // 新建文件 file file = new file(savedir, filename); // 打开文件输出流 fileoutputstream = new fileoutputstream(file); // 生成图片文件 this.photo.compress(bitmap.compressformat.jpeg, 100, fileoutputstream); // 相片的完整路径 this.picpath = file.getpath(); imageview imageview = (imageview) findviewbyid(r.id.imageview1); imageview.setimagebitmap(this.photo); } catch (exception e) { e.printstacktrace(); } finally { if (fileoutputstream != null) { try { fileoutputstream.close(); } catch (exception e) { e.printstacktrace(); } } } toast.maketext(getapplicationcontext(), "获取到了", toast.length_short).show(); } else { toast.maketext(getapplicationcontext(), "找不到图片", toast.length_short).show(); } } } break; case 2: { //打开相册并选择照片,这个方式选择单张 // 获取返回的数据,这里是android自定义的uri地址 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.imageview1); imageview.setimagebitmap(bitmapfactory.decodefile(picturepath)); break; } default: break; } } } }
注释的很详细,自己分析吧。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。