开源一款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 ...
随机推荐
- hdu 4003(树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 思路:dp[i][j]表示以i为根选择j个机器人的最小花费,然后就是背包了:dp[u][i]=m ...
- 标签中的rel属性的含义
rel与rev属性相同,它们都是属于LinkTypes属性. rel 属性 -- rel属性,描述了当前页面与href所指定文档的关系, rel是relationship(关系)的英文缩写. rev ...
- [JAVA]基于微信公众平台开放接口编写的sdk
最近在研究微信公众平台提供的公众服务号,以及提供的开放接口. 写了一个相对来说比较简单的基于java的微信sdk,目前实现的功能没有覆盖所有接口. 有兴趣的话,大家可以在这个基础上进行改进和完善,这样 ...
- 【BZOJ4002】[JLOI2015]有意义的字符串 数学
[BZOJ4002][JLOI2015]有意义的字符串 Description B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 Input 一行三个整数 ...
- ios笔试题(选择题)
1-10 C语言 & 计算机基础 1.请看下面一段代码 static int a = 1; int main(){ int b = 2; char *c = NULL; c = (char * ...
- 170424、Mysql权限控制 - 允许用户远程连接
Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作: 一.允许root用户在任何地方进行远程登录,并具有所有库 ...
- new Date()的浏览器兼容性问题
在页面中,我们使用了一个时间上的组件来开发时间选择框,在Chrome下是可以正常运行的,但是发现在IE下是无法正常工作的. 问题出在哪里呢? js从时间获取的时间字符串如果是"-" ...
- Ubuntu 下 chromium浏览器的标签乱码
最近使用ubuntu系统,安装了个chromium浏览器,标题不会乱码,不过标签乱码,火狐浏览器没有这个问题,强大的互联网告诉我是少字体的原因,执行下面的指令即可. sudo apt-get inst ...
- 解决从Windows拷贝来的文件到Ubuntu出现乱码的问题
1.转换文件内容编码 Windows下天生的纯文本文件,其中文编码为GBK,在Ubuntu下显示为乱码,可以使用iconv命令进行转换: iconv -f gbk -t utf8 sour ...
- Ubutun使用记录——语系错误(转)
add by zhj: 对原文有修改,原文是在创建用户时出现的问题,而我是在使用psql时出现的, 但问题是相同的. 原文:http://www.douban.com/note/362250557/ ...