android 使用相机拍照,并存储到手机sd卡上,并利用系统录像录像并播放
//首先声明一个成员变量 String savePath,用来储存文件路径
/**
* 保存照片路径
* @return 返回图片的一个文件
* @throws IOException 抛出一个异常
*/
private File createSavePath() throws IOException{
String saveFormat = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + saveFormat + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(imageFileName,".jpg",storageDir);
savePath = image.getAbsolutePath();
//将照片添加到相册中以便其他应用查看
galleryAddPic();
return image;
}
/**
* 将照片添加到相册中
*/
private void galleryAddPic() {
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(savePath);
Uri contentUri = Uri.fromFile(f);
intent.setData(contentUri);
this.sendBroadcast(intent);
}
/**
* 解码一幅缩放图片,放到imageview中
*/
private void setPic() {
// 得到imgeView这个控件的尺寸
int targetW = imageView.getWidth();
int targetH = imageView.getHeight(); // 得到这个位图的尺寸
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(savePath, bmOptions);
int photoW = bmOptions.outWidth;
int photoH = bmOptions.outHeight;
// 确定图片的缩减比例
int scaleFactor = Math.min(photoW/targetW, photoH/targetH); // 解码图像文件到一个位图的大小来填充视图
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = scaleFactor - 1;//这里我用的减1 ,因为在运行过程中程Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096) 就只能相对减少一个比例
bmOptions.inPurgeable = true; Bitmap bitmap = BitmapFactory.decodeFile(savePath, bmOptions);
imageView.setImageBitmap(bitmap);
}
最后调用,启动相机拍照
private void startActivity(){
//启动相机并给新照片创建文件对象
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//在调用activity的时候首先调用resolveActivity(),判断调用的activity有没有执行这个的能力
if (intent.resolveActivity(getPackageManager()) != null) {
File file = null;
try {
file = createSavePath();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),"IO异常错误!",Toast.LENGTH_LONG).show();
}
if (file != null){
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent,REQUESTCODE);
}
}
}
最后一步,在相机返回的时候用解码的位图显示到imageview中
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//首先判断返回是否成功
if (requestCode == REQUESTCODE && resultCode == RESULTCODE){
//解码图片放到imageview中
setPic();
}
}
简单的拍照就完成了。
录像并播放
跳转到录像:
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null){
startActivityForResult(intent,REQUESTCODE_VIDEO);
}
和拍照类似
if (requestCode == REQUESTCODE_VIDEO && resultCode == RESULTCODE){
//得到录制视频的uri
Uri uri = data.getData();
imageView.setVisibility(View.GONE);
videoView.setVisibility(View.VISIBLE);
//将uri设置到videoview中
videoView.setVideoURI(uri);
//实例化一个控制
mediaco = new MediaController(TakePicture.this);
videoView.setMediaController(mediaco);
mediaco.setMediaPlayer(videoView);
videoView.requestFocus();
}
在onActivityResult中实现即可。
android 使用相机拍照,并存储到手机sd卡上,并利用系统录像录像并播放的更多相关文章
- Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上
假设使用默认的系统管理,默认放在包以下.比較省心.并且在卸载app后不会造成数据残留.可是这样也有一个问题.比方我做一个背单词的软件,那么当用户卸载掉这个app时,他辛辛苦苦下载的单词库也没了... ...
- Android调用相机并将照片存储到sd卡上
Android中实现拍照有两种方法,一种是调用系统自带的相机,然后使用其返回的照片数据. 还有一种是自己用Camera类和其他相关类实现相机功能,这种方法定制度比较高,洗染也比较复杂,一般平常的应用只 ...
- Android 4.0以后正确的获取外部sd卡存储目录
刚解决这个棘手的问题 找了很久,随笔记下. 网上搜索 android 获取外部sd卡存储目录 普遍都是: 1) Environment.getExternalStorageDirectory() 这个 ...
- 【Android】14.0 第14章 内部存储与外部SD卡存储—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 Android使用的文件系统是基于Linux的文件系统,在Android应用程序中,开发人员既可以建立和访问程序自 ...
- Android 读取手机SD卡根目录下某个txt文件的文件内容
1.先看activity_main.xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and ...
- android学习笔记47——读写SD卡上的文件
读写SD卡上的文件 通过Context的openFileInput.openFileOutput来打开文件输入流.输出流时,程序打开的都是应用程序的数据文件夹里的文件,其存储的文件大小可能都比较有限- ...
- android中读取SD卡上的数据
通过Context的openFileInput或者openFileOutput打开的文件输入输出流是操作应用程序的数据文件夹里的文件,这样存储的大小比较有限,为了更好的存取应用程序的大文件数据,应用程 ...
- Android开发之SD卡上文件操作
1. 得到存储设备的目录:/SDCARD(一般情况下) SDPATH=Environment.getExternalStorageDirectory()+"/"; 2. 判断SD卡 ...
- Android权限安全(12)apk安装在sd卡上时,如何保证数据安全
apk安装在sd卡上时,如果把sd卡拿下安在另一个手机B上,那么apk的数据就可以被B里的恶意应用访问了. 下面是android解决这个问题的方案: 绑定设备 1,绑定perDevice使得应用以及应 ...
随机推荐
- tomcat普通用户运行
网站绑定域名后直接通过域名访问使用的是80端口,因此tomcat须监听80端口,而为了安全起见tomcat一般不用root身份运行,综上,需要以普通用户来运行监听80端口的tomcat.此时就会启动失 ...
- zigbee学习之路(五):定时器1(查询方式)
一.前言 今天,我们来学习几乎所有单片机都有的功能,定时器的使用,定时器对单片机来说是相当重要的,有了它,单片机就可以进行一些复杂的工作. 二.原理与分析 谈到定时器的控制,我们最先想到的是要给它赋初 ...
- PowerDeigner 一个很好的画uml 和建模的软件
pd: http://pan.baidu.com/s/1o6qpCT0
- EF中使用linq进行关联查询
EF使用linq进行多表查询是完全可以的,最后ToList()调用的时候回产生一条分页的sql语句,所以并不是全部查询再分页的.所以不会影响查询的性能 public void TestLinq() { ...
- python学习之if语句
1.if条件表达式判断 ##判断条件是true or false var1=10 if var1: print("true") print(var1) else: print(&q ...
- 关于Python中输出中文的一点疑问
#encoding=gb2312 import urllib import re def getHtml(url): page = urllib.urlopen(url) html = page.re ...
- Shell脚本查看apk签名信息
用shell写了一个查看apk签名的脚本.代码很少也很简单 支持递归目录查询 #!/bin/bash #使用方法 ./getcertificate.sh xx.apk get_signature() ...
- webform简单控件
表单元素: 文本类: text password textarea hidden text,password,textarea实现控件:textbox textmode属性选择password或m ...
- 解决sublime text3中的输入法不根随光标问题
日本的一位大神开发了一款插件用在Sublime Text上,以缓解输入法不跟随光标移动的问题.当然这个问题并没有完美的解决,据一些用户的反映,输入过程中还是偶尔会发生输入法不跟随光标移动的问题,不过确 ...
- 某篇ctr预估ppt的链接
csdn上面有一篇ppt,但是下载分太贵了.里面东西看起来讲的还可以.看看能不能嵌入. http://download.csdn.net/detail/u012289698/9371461 <i ...