开源一款android 偷拍 app【静拍】豌豆荚、flyme商店已经上线
首先先花3秒时间,预览下下app的大概是做啥的,解决啥痛点的:)
app: 本地下载地址
需求点:
1:音量键可以拍照
2:没有快门声、闪光灯
3:锁屏下、或者是在其他程序界面都可以拍照
思路:
1:创建一个内容观察者(ContentObserver)来监听音量变化
2:使用原生camera实现拍照
3:同1
技术总结:
1:android的音量内容分很多种类,有系统的、铃声的、音乐的(AudioManager.STREAM_MUSIC),我们只监听音乐的就好了
那么问题来了,如何确保任何情况下,音量键操作的对象,都是音乐呢?
我的解决办法是,通过服务,在后台播放一段无声的音频,这样,就确保挡使用音量键时, 音乐音量发生变化:)如何录制无声音频呢,使用windows附带的录音机就好啦;录好之后记得转成ogg格式,这样体积小很多~
2:使用原生的Camera对象,必须要有预览的对象,这是android为了防止你在用户不知情的情况下在后台启动camera拍摄他。。解决办法:将预览对象宽高都设置成1dp(大概芝麻大)。。。别问我为啥不设置成0dp,这样camera输不出来,拍出来的是一个黑点。。
3:拍照对焦问题,原先的方法是采用camera对焦触发完成之后,回调里再输出图像,可惜相机对焦速度受环境、机子性能影响很大,会导致我摁了3次音量键,前2次在对焦中,拍不出照片,第三次合焦成功了之后,连续输出三张一样的照片,用户体验很差。
解决思路是,相机不断对焦,拍照时,我只管输出图像,不管合焦与否。代码:拍摄时将Camera的对焦模式设置为(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE),这是比较新的api,以前都是用video的,区别在于新的对焦模式更加激烈、频繁点,也确保我们不会拍糊掉。
4:既然是偷拍app,那么图片当然是不能在相册中出现的,本程序中,是放在程序包在sd卡上的位置(android4.4以后,外置sd卡,除了公开和本程序自己的包,其他位置不能写。)getExternalFilesDir(null).getAbsolutePath() + "/imgs/"
5:既然图片不归相册管,那只能自己管理了。安卓自带的图片控件已经Deprecated,所以只能自己用GridView声明每行3个,每个图片宽度=(Gridview宽- 图片之间padding*3)/3;(除三可能会导致除不尽,余了一两个dp,所以我们的Gridview的marginleft要设置1dp,补全)
一开始我直接从存储中加载拍摄出来的照片,结果内存耗尽程序崩溃(现在主流手机像素都是800w 1800w);第一版是每次拍照的时候,额外输出一张256*256的缩略图;后来在逛github的时候,发现图片框架PICASSO,用下来很方便,在读取本地图片的时候,使用它提供的Resize方法,缩略图都不用创建了,而且内存管理上效果没多大区别,很方便哦。
6:图片有两种模式:查看模式:点击可以缩放查看细节;编辑模式:点击进行选中
图片列表,我们使用ArrayAdapter,里面的实体有 boolean IsSelected;是否选中的属性
图片的模式:查看/编辑,我们将标示IsImageEdit放到公共变量中,每次getView的时候,根据IsImageEdit显示是否每个图片右上角出现勾选框;根据IsSelected来判断是否勾选框选中
7:底部微信酷炫的Tab卡是网友的代码,仿真度100%,作者实现了绘制代码,通过viewPager偏移值,来设置笔刷的alpha值,来达到淡入淡出的效果,很赞,值得一看,我反正是看不懂。。。
8:使用AsyncTask来实现将IO操作从主线程分离出去,再也不用担心卡顿了!
说了那么多解决步骤,如何在代码中具体实现我也不多说了,各位直接看代码:)。本app的源码也托管在了osChina(github不稳定哦),欢迎朋友们Star、Fork,有能力的狼道友推送pr就更好咯~
OSCHINA地址: https://git.oschina.net/yso/JingPai

测试环境:
虚拟机:android4.4 4.3
真机:魅族 mx3
其余手机没有广泛进行测试,欢迎朋友反馈:)
最后的几句话:app很好,可惜我没贼胆;百度审核很认真,竟然说这款app有强烈的误导作用而拒绝了我的提交申请,我只能说,道友你很识货!
最后的最后:求扩散app。。造福更多道友。。。。
TODO:
1:增加定时拍照功能(不用音量键,每若干秒触发一次拍照)
2:增加摄像功能
因为精力关系,以上两点可能要延后进行哦
开源一款android 偷拍 app【静拍】豌豆荚、flyme商店已经上线的更多相关文章
- 个人开发者做一款Android App需要知道的事情
个人开发者做一款Android App需要知道的事情 在大学时, 自己是学计算机专业的,而且还和老师一起做过一年半的项目. 有时候是不是有这样的想法,做一个自己的网站.但一直未付诸行动.2012年时, ...
- 分享一下怎么开发一款图片视频类App,秒拍和prisma
第一步,分解短视频App的功能 我们在秒拍官网看到如此描述: [视频拍摄及导入]支持直接拍摄及导入手机本地的视频 [照片电影]照片专属特效,轻松创作照片电影 [MV特效]10余款全新MV特效,让普通视 ...
- 开源整理:Android App新手指引开源控件
开源整理:Android App新手指引开源控件 一个App第一次与用户接触或者发生大版本更新时,常常会用户进行新手引导,而一个好的新手指引,往往能够方便新用户快速了解操作你的应用功能.新手指引的重要 ...
- 140款Android开源优秀项目源码
BeautifulRefreshLayout-漂亮的美食下拉刷新 https://github.com/android-cjj/BeautifulRefreshLayout/tree/Beautifu ...
- [转载]或许您还不知道的八款Android开源游戏引擎
或许您还不知道的八款Android开源游戏引擎 分类: 技术文章 2010-08-04 20:27 17430人阅读 ...
- 转载: 开源整理:Android App新手指引开源控件
http://blog.coderclock.com/2017/05/22/android/open-source-android-app-guide-view-library/ 开源整理:Andro ...
- 或许您还不知道的八款Android开源游戏引擎
很多初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于iPhone下有诸如Cocos2d-iphone之类的免费游戏 ...
- 工具推荐:2016年最佳的15款Android黑客工具
黑客技术,曾被认为是专家的专有领域,但随着技术的崛起和移动安全领域的进步,黑客技术已经变得越来越普遍.随着人们越来越依赖于智能手机和其它的便携式设备来完成他们的日常活动,我们有必要了解一些Androi ...
- Lottie开源库实现Android动画效果
Lottie简介 Lottie是一个支持Android.iOS.React Native,并由Adobe After Effects制作aep格式的动画,然后经由bodymovin插件转化渲染为jso ...
随机推荐
- jQuery实现鼠标悬停显示提示信息窗口的方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ReactNative iOS源码解析
http://awhisper.github.io/2016/06/24/ReactNative%E6%B5%81%E7%A8%8B%E6%BA%90%E7%A0%81%E5%88%86%E6%9E% ...
- zookeeper配置详解
原文地址: http://itindex.net/detail/40187-zookeeper-%E7%AE%A1%E7%90%86%E5%91%98-%E7%AE%A1%E7%90%86 参数名 说 ...
- 编程之美 set 5 寻找数组中最大值和最小值
解法 1. 设置 min, max 两个变量, 然后遍历一遍数组, 比较次数为 2*N 2. 依然设置 min, max 两个变量并遍历数组, 但将遍历的 step 设置为 2, 比较次数为 1.5 ...
- 剑指 offer set 14 打印 1 到 N 中 1 的个数
总结 1. 假设 n == 2212, 算法分为两个步骤. 第一步, 将这个 2212 个数分为 1~ 212, 213 ~ 2212 2. 第一部分实际上是将 n 的规模缩小到 212. 假如知道如 ...
- 收集各种在线HTTP网站载入速度(响应时间)站长测试(检测)工具
收集各种在线HTTP网站载入速度(响应时间)站长测试(检测)工具 名称\详情 简单功能描述 推荐星级 演示/示例 监控宝 从中国多地对你提交的URL进行载入速度(响应时间)测试 ★★★★★ 17C ...
- 【BZOJ1895】Pku3580 supermemo Splay
[BZOJ1895]Pku3580 supermemo Description 给出一个初始序列fA1;A2;:::Ang,要求你编写程序支持如下操作: 1. ADDxyD:给子序列fAx:::Ayg ...
- Array.prototype.filter(Boolean)
ES5 中的数组有这个方法:Array.prototype.filter ,具体使用参考MDN,这里讲一个特殊应用: 回顾下语法: new_array = arr.filter(callback[, ...
- JAVA基础之sql模糊匹配、外键以及jsp中include的用法
一.SQL模糊匹配 适用于对字符串进行模糊搜索 格式: 字段名 Like '%关键词%' % 表示这个位置可有任意个字符(没有也可以) %关键词% 只要包含关键词就算 ...
- 查看嵌入式设备的CPU频率
对于有多个核心的CPU,查看CPU 频率的方法是: cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 上面的这个是查看核心0的cpu的 ...
