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使得应用以及应 ...
随机推荐
- 指定YUM安装包的体系结构或版本
在单一体系结构下同时安装32位和64位包echo ‘multilib_policy=all’ >> /etc/yum.conf 指定体系结构 查看当前系统体系结构[root@oracle ...
- ASP.NET 管道事件与HttpModule, HttpHandler简单理解
BeginRequest 指示请求处理开始 AuthenticateRequest 封装请求身份验证过程 AuthorizeRequest 封装检查是否能利用以前缓存的输出页面处理请求的过程 Reso ...
- 【转】运行java -version命令时出现错误及解决
转载地址:http://blog.sina.com.cn/s/blog_50f21fed01012sf2.html 按照上一篇的步骤配置JAVA_HOME.CLASSPATH和Path三个变量 ...
- a标签样式
.a{ cursor:pointer; color: blue; text-decoration:none; }
- 自己写的java用jxl导出到excel工具
package com; import java.io.BufferedOutputStream; import java.io.File; import java.io.IOException; i ...
- SourceTree 免登录跳过初始设置
SourceTree 安装之后需要使用账号登陆以授权,以前是可以不登陆的,但是现在是强制登陆. 虽然是免费授权,但是碰上不可抗力因素,登陆不是很方便,这里记录一下跳过这个初始化的步骤. 安装之后,转到 ...
- Visual Studio的Web Performance Test提取规则详解(3)
总结 Visual Studio的Web Performance Test是基于HTTP协议层的,它不依赖于浏览器,通过直接接收,发送HTTP包来和Web服务器交互.Web Performance T ...
- 嵌入式之Linux系统裁剪和定制---(kernel+busyboxy+dropbear+nginx)
本文将介绍通过完全手动定制内核,在此基础上添加 busybox ,并实现远程登陆,使裁剪的 linux 能够运行 nginx . 在此之前介绍一下 linux 系统的启动流程. linux系统启动流程 ...
- struct内存对齐1:gcc与VC的差别
struct内存对齐:gcc与VC的差别 内存对齐是编译器为了便于CPU快速访问而采用的一项技术,对于不同的编译器有不同的处理方法. Win32平台下的微软VC编译器在默认情况下采用如下的对齐规则: ...
- 我的android学习经历34
用类对象作为ArrayAdapter绑定的基本数据类型(和SimpleAdater效果类似) 一般ArrayAdapter绑定的基本数据类型是String,接下来介绍一下类对象作为基本数据类型: 首先 ...