//首先声明一个成员变量 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. POJ - 1132Border

    POJ - 1132Border Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u Descrip ...

  2. 将java项目转换成Web项目

    http://www.cnblogs.com/kaige123/p/5866446.html 在项目上点击右键,进入Properties配置,点击Project Facets,再点击Convert t ...

  3. @weakify, @strongify ObjC的Block中使用weakSelf/strongSelf @weakify/@strongify

    首先要说说什么时候使用weakSelf和strongSelf. 下面引用一篇博客<到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf>的内容: Objec ...

  4. Java学习第三天160818 表单 框架 下拉列表等

    rect 矩形  src 引用 width宽  height  高  iframe  网页内嵌式小窗口(成对出现) auto  自动的  frameborder  边线  scrolling  滚动条 ...

  5. 2016.8.16 Java培训第一天

    1. 十进制转换二进制 31/2=15余1  15/2=7余1 7/2=3余1 3/2=1余1    31的二进制结果为11111 35/2=17余1  17/2=8余1  8/2=4余0 4/2=2 ...

  6. CSS中的浮动问题

    有关于我们经常做的导航问题.我们如果想用ul>li来做导航的话,我是一般是用到浮动这个属性的. 也就是 float:left; 或者是 display:inline-block;  下边代码: ...

  7. Flowplayer-playlist

    SOURCE URL: https://flowplayer.org/docs/playlist.html HTML layout Here is a typical setup for a play ...

  8. MultiProvider

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

  9. phonegap 3.3教程 地理信息api教程

    一 准备工作 phonegap3.3的地理信息教程.从零开始,首先要新建一个项目从命令行启动 可以看到这是默认的生成的www目录,在这个目录里是最原始的html文件,编译的时候在根据这里的文件生成an ...

  10. spinner下拉框组件

    方法一代码如下: <string-array name="city_name"> <item>浙江</item> <item>上海& ...