在安卓系统下,实现拍照主要有两种方式:第一种就是直接调用系统的相机实现拍照,简单快捷。但是弊端就是不能自定义拍照界面。第二种就是根据Android系统提供的相关API进行自定义拍照,这样就是可以根据具体需求实现相机界面。

本篇文章主要讲解根据系统API自定义相机拍照,使用SurfaceView进行相机预览图,但是我们要实现的是静默拍照 也就是说不能出现预览图,但是由于安全因素考虑,Android系统规定自定义拍照必要要有预览图,所以我们可以投机取巧,将SufaceView预览图的宽高均设置为0.1dp ,这样用户就看不到预览图了。其次就是将拍照界面的背景设置为透明即可。具体代码如下:

布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="0.1dp"android:layout_height="0.1dp"><SurfaceViewandroid:id="@+id/surface_view"android:layout_width="match_parent"android:layout_height="match_parent" /></FrameLayout>

设置Activiry的透明Style:

    <style name="touming" parent="AppTheme"><item name="android:windowBackground">@android:color/transparent</item><item name="android:colorBackgroundCacheHint">@null</item><item name="android:windowIsTranslucent">true</item><item name="android:windowAnimationStyle">@android:style/Animation</item><item name="windowNoTitle">true</item><item name="windowActionBar">false</item><item name="android:windowContentOverlay">@null</item></style>

下面为自定义相机功能:

设置surfaceView:

        mSurfaceView = (SurfaceView) findViewById(R.id.surface_view);mSurfaceHolder = mSurfaceView.getHolder();mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);mSurfaceHolder.addCallback(new NewSurfaceHoler());

实现SurfaceView的回调:

    class NewSurfaceHoler implements SurfaceHolder.Callback {@Overridepublic void surfaceCreated(SurfaceHolder holder) {try {Camera.CameraInfo cameraInfo = new Camera.CameraInfo();int numberOfCameras = Camera.getNumberOfCameras();for (int i = 0; i < numberOfCameras; i++) {Camera.getCameraInfo(i, cameraInfo);if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {mCamera = Camera.open(i);mCamera.setPreviewDisplay(holder);mCamera.setDisplayOrientation(getPreviewDegree(PhotoActivity.this));mCamera.startPreview();/*** 相机开启需要时间 延时takePicture*/new Handler().postDelayed(new Runnable() {@Overridepublic void run() {mCamera.takePicture(null, null, new Camera.PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {Bitmap source = BitmapFactory.decodeByteArray(data, 0, data.length);int degree = Config.readPictureDegree(getFilePath());Bitmap bitmap = Config.rotaingImageView(degree, source);Config.Image = bitmap;saveBitmap(bitmap, new File(getFilePath()));}});}}, 2000);}}} catch (Exception e) {e.printStackTrace();}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {Camera.Parameters parameters = mCamera.getParameters(); // 获取各项参数parameters.setPictureFormat(PixelFormat.JPEG); // 设置图片格式parameters.setJpegQuality(100); // 设置照片质量/*** 以下不设置在某些机型上报错*/int mPreviewHeight = parameters.getPreviewSize().height;int mPreviewWidth = parameters.getPreviewSize().width;parameters.setPreviewSize(mPreviewWidth, mPreviewHeight);parameters.setPictureSize(mPreviewWidth, mPreviewHeight);mCamera.setParameters(parameters);}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {mCamera.stopPreview();mCamera.unlock();mCamera.release();}}

以上就是拍照的核心代码。

还有其他细节设置比如:预览图角度旋转, 拍照后图片旋转设置等代码下载Demo 查看。

Demo下载

扫描下方二维码关注公众号,及时获取文章推送

Android静默拍照(无感知拍照)相关推荐

  1. android无感知拍照github,装X指南之通过 VirtualApp 实现免 Root 权限 Hook

    装X指南之通过 VirtualApp 实现免 Root 权限 Hook 一.前言 之前写的 「装X指南之Xposed安装与配置」,有人反馈手机 root 风险较大,而且操作成本高,有没有什么方法是不需 ...

  2. android 静默拍照功能,Android实现静默拍照功能

    本文实例为大家分享了Android实现静默拍照功能的具体代码,供大家参考,具体内容如下 1.申请权限(6.0以后要动态申请) 2.创建相机工具类 CameraPreview: public class ...

  3. Android静默拍照实现

    1.申请权限(6.0以后要动态申请) <uses-permission android:name="android.permission.CAMERA" /> < ...

  4. (android硬件应用实战)摄像头拍照实现和总结

    在实现摄像头拍照功能应用之前,考虑两个风险 [1]       你的应用不是每一款android 机器都可以使用 主要原因: 摄像头拍照功能执行的过程为  应用调用android系统API--> ...

  5. Android 仿微信朋友圈拍照原理解读,技术分析

    在日常开发中,我们的APP中经常会有拍照的功能,很多的产品经理会要求把拍照和拍照后编辑的体验弄成和微信一样. 先来看看微信的拍照界面和编辑界面 微信拍照的两个优点 :1.响应速度快,从点击拍照按钮,到 ...

  6. Android开发 Camera2开发_1_拍照功能开发

    Android开发 Camera2开发_1_拍照功能开发 介绍 google已经在Android5.1之后取消了对Camera1的更新,转而提供了功能更加强大的Camera2.虽然新版本依然可以使用C ...

  7. Android 7.0 获取相机拍照图片,适配三星手机拍照,解决三星手机拍照屏幕旋转,判断设备是否有摄像头

    方法1 新建/res/xml/file_paths: <?xml version="1.0" encoding="utf-8"?> <path ...

  8. android peap,Android连接IEEE8021X PEAP  无感知WiFi

    受保护的可扩展的身份验证协议 (PEAP) 是可扩展的身份验证协议 (EAP) 家族的一个新成员.PEAP 使用传输级别安全性 (TLS) 在正在验证的 PEAP 客户端(例如无线计算机)和 PEAP ...

  9. android开启照相功能,Android打开系统相机并拍照的2种显示方法

    本文实例为大家分享了Android打开系统相机并拍照的具体实现代码,供大家参考,具体内容如下 目标效果: 第二张为点击第一个按钮拍照后显示的,比较模糊,第三章为点击第二个按钮拍照后显示的,比较清楚. ...

最新文章

  1. C++五子棋(五)——实现AI落子
  2. oracle无法重建em,ORACLE 11g, EM 无法启动的问题和重建
  3. php图片视频,PHP中使用php5-ffmpeg撷取视频图片实例
  4. matlab能用矩阵操作就不要用for循环
  5. Apple Cached Service 导致 iPhone app store无法下载程序
  6. android gridview横向显示图片,Android使用Gridview单行横向滚动显示
  7. 打印机驱动冲突和端口异常:win10更新部分补丁后,打印机本地连接(连接打印机的主机)可以打印,其他共享网络中的电脑可以连接到打印机,但不能打印——解决方案...
  8. 如何从Swift调用Objective-C代码?
  9. %set rsh=server.CreateObject(adodb.recordset)%
  10. 数值分析(1)-绪论:误差
  11. AutoCAD二次开发(.Net)之加载某种线型(LineType)
  12. 非结构化数据分析技术是忽悠
  13. Balanced MSE 使用指南
  14. python,基础-字符串(1)
  15. 优动漫PAINT是什么?有哪些功能和特色
  16. 微信授权登录与绑定或者改绑手机号关系?
  17. ct扫描方式有哪些_医学影像技术(医学高级):CT必看题库知识点(考试必看) - 考试题库...
  18. 怎么把图片压缩到200K以内?如何在线压缩图片大小?
  19. signature=45f0fd12ff31dea1feafec2c512144de,急性荨麻疹伴心电图异常与变应原检测123例相关性研究...
  20. 使用ajaxupload.js插件上传图片不成功问题----RTFSC

热门文章

  1. Python中的立方根
  2. 转载文章-【工具】10分钟快速搭建属于自己的文档网站-来自掘金
  3. 启动U盘安装linux系统
  4. 〖Python 数据库开发实战 - Python与MySQL交互篇⑫〗- 项目实战- 实现新闻管理模块
  5. java 未读消息_javaweb未读消息提醒
  6. while(true) Thread.Sleep(XX)我通常是用这种写法,有没有更好的写法或者改进
  7. 人的判断力受制于他的知识和经验:明月当空叫,黄犬卧花心
  8. 惠海半导体H7230直接替换BP1371 BP1361方案设计
  9. 使用Excel中PPMT函数和IPMT函数进行等额本息还款的计算方法
  10. android 手势识别 (缩放 单指滑动 多指滑动)