android开发 无预览定时拍照
demo实现功能:
打开主页面自动启动定时拍照,10s拍一次。
注意事项,初始化摄像头之后不能立即拍照,否则无效,必须等待几秒后才能拍。这里用的是Handler进行延时处理拍照消息的。
package com.feijian.takephotodemo; import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.Size;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.FrameLayout; /**
* 设置定时拍照功能
* @author huqiang
*
*/
public class InitTimetoTakePic { private static InitTimetoTakePic mInstance;
Activity mContext;
static FrameLayout mSurfaceViewFrame;
private static Camera mCamera;
private static CameraPreview mPreview; static String TAG = InitTimetoTakePic.class.getSimpleName();
private InitTimetoTakePic(Activity context)
{
this.mContext = context;
}
public synchronized static InitTimetoTakePic getInstance(Activity context)
{
if(mInstance ==null)
{
mInstance = new InitTimetoTakePic(context); }
return mInstance;
}
public void initView(FrameLayout surfaceViewFrame)
{
mSurfaceViewFrame = surfaceViewFrame;
}
/**
* 启动定时拍照并上传功能
*/
Handler mHandler = new Handler()
{
@Override
public void handleMessage(Message msg) {
switch(msg.what)
{
case 1:
Log.v(TAG, "开始拍照");
initCarema();
break;
case 2:
mCamera.autoFocus(new AutoFocusCallback() { @Override
public void onAutoFocus(boolean success, Camera camera) {
// 从Camera捕获图片
Log.v(TAG, "自动聚焦111"+success);
mCamera.takePicture(null, null, mPicture);
mHandler.sendEmptyMessageDelayed(1, 5*1000);
}
});
break;
}
}
};
public void start()
{
mHandler.sendEmptyMessageDelayed(1, 7*1000); //7s 后开始启动相机
}
private void initCarema()
{
Log.v(TAG, "initCarema");
if(mCamera==null)
{
Log.v(TAG, "camera=null");
mCamera = getCameraInstance();
mPreview = new CameraPreview(mContext, mCamera);
mSurfaceViewFrame.removeAllViews();
mSurfaceViewFrame.addView(mPreview);
}
Log.v(TAG, mCamera==null ?"mCamera is null":"mCamera is not null");
mCamera.startPreview();
mHandler.sendEmptyMessageDelayed(2, 3*1000); //3s后拍照
}
/** 检测设备是否存在Camera硬件 */
private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_CAMERA)) {
// 存在
return true;
} else {
// 不存在
return false;
}
} /** 打开一个Camera */
public static Camera getCameraInstance() {
Camera c = null;
try {
c = Camera.open();
c.setDisplayOrientation(90);
Camera.Parameters mParameters = c.getParameters();
//可以用得到当前所支持的照片大小,然后
List<Size> ms = mParameters.getSupportedPictureSizes();
mParameters.setPictureSize(ms.get(0).width, ms.get(0).height); //默认最大拍照取最大清晰度的照片
c.setParameters(mParameters);
} catch (Exception e) {
Log.d(TAG, "打开Camera失败失败");
}
return c;
} private PictureCallback mPicture = new PictureCallback() { @Override
public void onPictureTaken(byte[] data, Camera camera) {
// 获取Jpeg图片,并保存在sd卡上
String path = Environment.getExternalStorageDirectory().getAbsolutePath() +"/data/data/";
File dirF = new File(path);
if(!dirF.exists())
{
dirF.mkdirs();
}
File pictureFile = new File(path + System.currentTimeMillis()+ ".jpg");
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
Log.d(TAG, "保存图成功");
} catch (Exception e) {
Log.d(TAG, "保存图片失败");
e.printStackTrace();
}
releaseCarema();
}
};
public void releaseCarema()
{
if(mCamera!=null){
mCamera.stopPreview();
mCamera.release();
mCamera=null;
}
}
}
android开发 无预览定时拍照的更多相关文章
- Android开发 Camera2开发_2_预览分辨率或拍照分辨率的计算
前言 不管在Camera1或者Camera2在适配不同手机/不同使用场景的情况下都需要计算摄像头里提供的分辨率列表中最合适的那一个分辨率.所以在需要大量机型适配的app,是不建议不经过计算直接自定义分 ...
- Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等
仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 微信 微信 微信 ...
- Android 使用 Camera2 完成预览和拍照
Android API 21新增了Camera2,这与之前的camera架构完全不同,使用起来也比较复杂,但是功能变得很强大. 在讲解开启预览之前,首先需要了解camera2的几个比较重要的类: Ca ...
- Android Camera2 预览,拍照,人脸检测并实时展现
https://www.jianshu.com/p/5414ba2b5508 背景 最近需要做一个人脸检测并实时预览的功能.就是边检测人脸,边在预览界面上框出来. 当然本人并不是专门做 ...
- Android 10开发者预览版功能介绍
Android P的开发者预览版最亮眼的功能莫过于支持“刘海屏”等屏幕显示.同样在适配可折叠设备方面,Android Q的第一个开发者预览版也很“接地气”,谷歌早在去年11月就发布了对可折叠设备的支持 ...
- Webappbuilder开发快速预览
Webappbuilder开发快速预览 by 李远祥 Webappbuilder for ArcGIS 是由ArcGIS JavaScripit API和dojo创建的,它允许通过创建自己的widge ...
- Android远程桌面助手(B1185)for Android P开发者预览版
Android P的开发者预览版已出,其中App compatibility changes部分特别强调“The platform restricts the use of some non-SDK ...
- Windows 10 开发人员预览版中的新增功能(转自 IT之家)
Windows 10 开发人员预览版中的新增功能 在Win10预览版中安装工具与SDK后,即可着手创建Windows通用应用或先浏览目前的环境与此前相比都发生了什么变化. 应用建模 文件资源管理器: ...
- Android 开发 Camera2开发_3_处理预览和拍照偏暗问题
通过调整曝光解决 参考:https://stackoverflow.com/questions/28429071/camera-preview-is-too-dark-in-low-light-and ...
随机推荐
- android版猜拳游戏源码分享
android版猜拳游戏源码分享安卓版猜拳游戏源码,该文件中带有安装测试包的,这个游戏源码比较简单的,现在有两个代码,一个自定义VIEW的,一个就是普通的imageView图片,游戏非常适合一些新手的 ...
- jquery加载页面的方法(页面加载完成就执行)
jquery加载页面的方法(页面加载完成就执行),建议大家看下windows.onload与$(document).ready之间的区别. 1.$(function(){ $("#a&qu ...
- Python-2.7.11+Django-1.9.4安装配置
1.去python官网下载2.7的最新版本 https://www.python.org/downloads 1.1 解压Python-2.7.11.tgz tar xvf Python-2.7.11 ...
- 记一次动态调用WebService
这次的使用参考博客园中的ID是 生命不息,折腾不止 http://www.cnblogs.com/leolion/p/4757320.html ,感谢分享 博客园让自己慢慢的成长,少不了这些无私奉献 ...
- Eval is Devil-MongoDB master/slave上运行Eval遇到的问题
随便写一句,以免有跟我一样的人遇到这个问题. 驱动版本:MongoDB C# Driver 1.7.0 当在Master/Slave集群上使用Eval的时候,Eval操作只会在Master结点上运行, ...
- 索尼MT27i Android2.3.7 线刷Android4.04
Author:KillerLegend From:http://www.cnblogs.com/killerlegend/p/3733150.html Date:2014.5.16 工具:Window ...
- 网页绘制图表 Google Charts with JavaScript #1....好强、好简单啊!
此为文章备份,原文出处(我的网站) 网页绘制图表 Google Charts with JavaScript....好强.好简单啊!#1 http://www.dotblogs.com.tw/mis2 ...
- 简单翻译和补充:1. GNU ARM Eclipse
原文链接: GNU ARM Eclipse GNU 介绍: GNU 计划,又称革奴计划,是由RichardStallman在1983年9月27日公开发起的.它的目标是创建一套完全自由的操作系统.Ric ...
- python杂记-4(迭代器&生成器)
#!/usr/bin/env python# -*- coding: utf-8 -*-#1.迭代器&生成器#生成器#正确的方法是使用for循环,因为generator也是可迭代对象:g = ...
- XAML(4) - 标记扩展
在为元素设置值时, 可以直接设置值, 但有时标记扩展非常有帮助.标记扩展包含花括号,其后是定义了标记扩展类型的字符串标志. 下面是一个Static Resource标记扩展: <Button N ...