欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android中打开相机、打开相册进行图片的获取示例

程序员文章站 2024-02-17 15:43:10
这里介绍在android中实现相机调取、拍照片、获取照片、存储新路径等已经打开相册、选择照片等功能 首先看一下界面,很简单 配置读取内存卡和调用照相头的功能...

这里介绍在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;
}
}
}
}

注释的很详细,自己分析吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。