//首先声明一个成员变量 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卡上,并利用系统录像录像并播放的更多相关文章

  1. Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上

    假设使用默认的系统管理,默认放在包以下.比較省心.并且在卸载app后不会造成数据残留.可是这样也有一个问题.比方我做一个背单词的软件,那么当用户卸载掉这个app时,他辛辛苦苦下载的单词库也没了... ...

  2. Android调用相机并将照片存储到sd卡上

    Android中实现拍照有两种方法,一种是调用系统自带的相机,然后使用其返回的照片数据. 还有一种是自己用Camera类和其他相关类实现相机功能,这种方法定制度比较高,洗染也比较复杂,一般平常的应用只 ...

  3. Android 4.0以后正确的获取外部sd卡存储目录

    刚解决这个棘手的问题 找了很久,随笔记下. 网上搜索 android 获取外部sd卡存储目录 普遍都是: 1) Environment.getExternalStorageDirectory() 这个 ...

  4. 【Android】14.0 第14章 内部存储与外部SD卡存储—本章示例主界面

    分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 Android使用的文件系统是基于Linux的文件系统,在Android应用程序中,开发人员既可以建立和访问程序自 ...

  5. Android 读取手机SD卡根目录下某个txt文件的文件内容

    1.先看activity_main.xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and ...

  6. android学习笔记47——读写SD卡上的文件

    读写SD卡上的文件 通过Context的openFileInput.openFileOutput来打开文件输入流.输出流时,程序打开的都是应用程序的数据文件夹里的文件,其存储的文件大小可能都比较有限- ...

  7. android中读取SD卡上的数据

    通过Context的openFileInput或者openFileOutput打开的文件输入输出流是操作应用程序的数据文件夹里的文件,这样存储的大小比较有限,为了更好的存取应用程序的大文件数据,应用程 ...

  8. Android开发之SD卡上文件操作

    1. 得到存储设备的目录:/SDCARD(一般情况下) SDPATH=Environment.getExternalStorageDirectory()+"/"; 2. 判断SD卡 ...

  9. Android权限安全(12)apk安装在sd卡上时,如何保证数据安全

    apk安装在sd卡上时,如果把sd卡拿下安在另一个手机B上,那么apk的数据就可以被B里的恶意应用访问了. 下面是android解决这个问题的方案: 绑定设备 1,绑定perDevice使得应用以及应 ...

随机推荐

  1. 在 ASP.NET 中使用 jQuery.load() 方法

    今天就让我们看看在 ASP.NET 中使用 jQuery.load() 方法来调用 ASP.NET 的方法,实现无刷新的加载数据. 使用 jQuery 的朋友应该知道可以使用 jQuery.load( ...

  2. Together

  3. 【转】PowerShell入门(九):访问.Net程序集、COM和WMI

    转至:http://www.cnblogs.com/ceachy/archive/2013/02/28/PowerShell_DotNet_COM_WMI.html PowerShell可以设计的大而 ...

  4. jQuery 选择器 (基础恶补之二)

    返回 CSS 属性 如需返回指定的 CSS 属性的值,请使用如下语法: css("propertyname"); 下面的例子将返回首个匹配元素的 background-color ...

  5. JFrame中setDefaultCloseOperation的参数含义

    实例1:一个空的java窗口 // JFrameDemo1.java import javax.swing.*;     //使用Swing类,必须引入Swing包 public class JFra ...

  6. Duilib实现QQ聊天窗口晃动

    转载:http://blog.csdn.net/arbboter/article/details/26282717 转载:http://blog.csdn.net/zerolusta/article/ ...

  7. 标准DSO设置

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. MySQL 5.6 双机热备

    目录: 1.说明 2.数据手工同步 3.修改主数据库配置文件 4.修改从数据库配置文件 5.主数据库添加备份用户 6.从数据库设置为Slave 7.验证 1.说明   1)数据库版本要高于5.1 2) ...

  9. 《BI项目笔记》无法解密受保护的 XML 节点“DTS:Password” 解决办法

    说明: 无法解密受保护的 XML 节点“DTS:Password”,错误为 0x8009000B“该项不适于在指定状态下使用.”.可能您无权访问此信息.当发生加密错误时会出现此错误.请确保提供正确的密 ...

  10. LTE Module User Documentation(翻译9)——Using the EPC with emulation mode

    LTE用户文档 (如有不当的地方,欢迎指正!) 15 Using the EPC with emulation mode(使用仿真方式的 EPC)     在上一节中,我们使用点对点链路连接基站和服务 ...