Android静默拍照(无感知拍照)
在安卓系统下,实现拍照主要有两种方式:第一种就是直接调用系统的相机实现拍照,简单快捷。但是弊端就是不能自定义拍照界面。第二种就是根据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静默拍照(无感知拍照)相关推荐
- android无感知拍照github,装X指南之通过 VirtualApp 实现免 Root 权限 Hook
装X指南之通过 VirtualApp 实现免 Root 权限 Hook 一.前言 之前写的 「装X指南之Xposed安装与配置」,有人反馈手机 root 风险较大,而且操作成本高,有没有什么方法是不需 ...
- android 静默拍照功能,Android实现静默拍照功能
本文实例为大家分享了Android实现静默拍照功能的具体代码,供大家参考,具体内容如下 1.申请权限(6.0以后要动态申请) 2.创建相机工具类 CameraPreview: public class ...
- Android静默拍照实现
1.申请权限(6.0以后要动态申请) <uses-permission android:name="android.permission.CAMERA" /> < ...
- (android硬件应用实战)摄像头拍照实现和总结
在实现摄像头拍照功能应用之前,考虑两个风险 [1] 你的应用不是每一款android 机器都可以使用 主要原因: 摄像头拍照功能执行的过程为 应用调用android系统API--> ...
- Android 仿微信朋友圈拍照原理解读,技术分析
在日常开发中,我们的APP中经常会有拍照的功能,很多的产品经理会要求把拍照和拍照后编辑的体验弄成和微信一样. 先来看看微信的拍照界面和编辑界面 微信拍照的两个优点 :1.响应速度快,从点击拍照按钮,到 ...
- Android开发 Camera2开发_1_拍照功能开发
Android开发 Camera2开发_1_拍照功能开发 介绍 google已经在Android5.1之后取消了对Camera1的更新,转而提供了功能更加强大的Camera2.虽然新版本依然可以使用C ...
- Android 7.0 获取相机拍照图片,适配三星手机拍照,解决三星手机拍照屏幕旋转,判断设备是否有摄像头
方法1 新建/res/xml/file_paths: <?xml version="1.0" encoding="utf-8"?> <path ...
- android peap,Android连接IEEE8021X PEAP 无感知WiFi
受保护的可扩展的身份验证协议 (PEAP) 是可扩展的身份验证协议 (EAP) 家族的一个新成员.PEAP 使用传输级别安全性 (TLS) 在正在验证的 PEAP 客户端(例如无线计算机)和 PEAP ...
- android开启照相功能,Android打开系统相机并拍照的2种显示方法
本文实例为大家分享了Android打开系统相机并拍照的具体实现代码,供大家参考,具体内容如下 目标效果: 第二张为点击第一个按钮拍照后显示的,比较模糊,第三章为点击第二个按钮拍照后显示的,比较清楚. ...
最新文章
- C++五子棋(五)——实现AI落子
- oracle无法重建em,ORACLE 11g, EM 无法启动的问题和重建
- php图片视频,PHP中使用php5-ffmpeg撷取视频图片实例
- matlab能用矩阵操作就不要用for循环
- Apple Cached Service 导致 iPhone app store无法下载程序
- android gridview横向显示图片,Android使用Gridview单行横向滚动显示
- 打印机驱动冲突和端口异常:win10更新部分补丁后,打印机本地连接(连接打印机的主机)可以打印,其他共享网络中的电脑可以连接到打印机,但不能打印——解决方案...
- 如何从Swift调用Objective-C代码?
- %set rsh=server.CreateObject(adodb.recordset)%
- 数值分析(1)-绪论:误差
- AutoCAD二次开发(.Net)之加载某种线型(LineType)
- 非结构化数据分析技术是忽悠
- Balanced MSE 使用指南
- python,基础-字符串(1)
- 优动漫PAINT是什么?有哪些功能和特色
- 微信授权登录与绑定或者改绑手机号关系?
- ct扫描方式有哪些_医学影像技术(医学高级):CT必看题库知识点(考试必看) - 考试题库...
- 怎么把图片压缩到200K以内?如何在线压缩图片大小?
- signature=45f0fd12ff31dea1feafec2c512144de,急性荨麻疹伴心电图异常与变应原检测123例相关性研究...
- 使用ajaxupload.js插件上传图片不成功问题----RTFSC
热门文章
- Python中的立方根
- 转载文章-【工具】10分钟快速搭建属于自己的文档网站-来自掘金
- 启动U盘安装linux系统
- 〖Python 数据库开发实战 - Python与MySQL交互篇⑫〗- 项目实战- 实现新闻管理模块
- java 未读消息_javaweb未读消息提醒
- while(true) Thread.Sleep(XX)我通常是用这种写法,有没有更好的写法或者改进
- 人的判断力受制于他的知识和经验:明月当空叫,黄犬卧花心
- 惠海半导体H7230直接替换BP1371 BP1361方案设计
- 使用Excel中PPMT函数和IPMT函数进行等额本息还款的计算方法
- android 手势识别 (缩放 单指滑动 多指滑动)