一、前言
最近玩抖音感觉都快废了,所以我决定不玩了我要学习所以先从他的动态壁纸学起,因为整个应用中也就是动态壁纸有点好玩的技术,而且也就是抖音能做这个功能,其他的短视频或许做不了比如快手如果要做你觉得有几个人会把老铁双击666这样的视频作为壁纸,而抖音中的小姐姐作为壁纸的可能性会很大。其实动态壁纸在Android中早就用到了,之前说的很神奇的透明屏幕其实可以用动态壁纸来做:
二、使用方法
但是先不说这个,先把抖音的动态壁纸功能说一下吧,在Android中开发动态壁纸其实很简单,只需要两步就可以了:
第一步:定义一个动态壁纸服务
继承系统壁纸服务类,然后在回调方法中创建一个引擎返回即可。关于引擎后面会说。
第二步:在XML中声明服务
这里需要声明权限以及定义壁纸的额外附属信息,比如壁纸的预览图片等。
然后我们需要启动系统设置壁纸的页面:
这样我们就完成了所以设置操作了,所以接下来就需要在上面的那个引擎中进行操作了,我们还是回到抖音中查看他是如何做到的,这样的跟踪就简单了,直接去他的xml中搜索那个权限:
找到这个类之后,直接去Jadx中去搜索:
找到创建的回调方法中,然后点进去进行查看:
三、方法说明
看到这里就明白了,他是会把当前视频下载下来,然后结合MediaPlayer来进行操作的,而播放载体的SurfaceHolder就来自于引擎回调方法,接下来详细看看引擎有哪些重要的方法:
第一个方法:getSurfaceHolder
获取当前动态壁纸需要展示的SurfaceHolder,这个类型相信大家弄过视频都对这个不陌生了,如果有了SurfaceHolder作为渲染载体我们可以自己手动画画,用摄像头,播放视频等操作了。所以这个方法是多么至关重要。
第二个方法:onSurfaceCreated
渲染创建的时候也就是壁纸启动的时机,所以一般初始化操作都会在这里做,比如上面的抖音设置视频准备工作就在这里做的。这个方法是个回调方法,可以获取到SurfaceHolder变量。
第三个方法:onTouchEvent
这个方法其实不陌生了,就是触摸事件,我们如果在对手指触摸屏幕的时候需要做一些事情的时候可能需要在这里记录触摸的坐标信息进行后面操作。
第四个方法:onOffsetsChanged
这个方法是在壁纸滑动的时候位置变化回调,这个对于做动态壁纸特效用的会比较多,现在市面上不是有很多酷炫的3D壁纸效果,其实这个方法必不可少。
第五个方法:onVisibilityChanged
这个方法非常重要,他表示当前壁纸是否可见,比如在桌面上点击应用图标进入应用的时候这时候壁纸就不可见了,我们可以暂停一些事情,当我们按返回键或者home键回到桌面的时候壁纸又可见了,这时候我们在继续做一些事情。
第六个方法:onSurfaceDestroyed
这个方法和之前的创建方法对应就是销毁的时候我们需要释放资源操作。
四、案例操作
第一、实现视频动态壁纸
主要就是这几个方法非常关键,下面我们就用三个场景来看看动态壁纸的玩法,首先第一个把抖音的视频做成动态壁纸功能实现了,其实很简单,这里就模拟本地一个视频,直接用MediaPlayer类进行操作,把视频展示在引擎的SurfaceHolder上即可:
因为有了壁纸的SurfaceHolder,结合MediaPlayer就可以直接操作了。没有任何难度,我们可以在壁纸可见和不可见的时候暂停播放视频。看看效果图:
第二、自定义绘画动态壁纸
因为了有了SurfaceHolder,我们可以获取到画布,然后随便在上面涂鸦操作,这里结合触摸点事件进行操作
每次触摸壁纸就在画布上画一个圆圈,当然有了画布和画笔你想怎么涂都可以。看看效果图:
第三、用摄像头拍摄制作动态壁纸
因为之前开发过摄像头的知道,摄像头采集到的数据也是需要展示出来的,那么这里也是展示到一个SurfaceHolder即可:
这样我们就可以做了之前说的透明壁纸功能了,也可以对摄像头的每一帧数据进行处理比如美颜等看到不同的效果。看看效果图:
第四、结合OpenGL做酷炫桌面
这个这里不在弄了,因为大家懂得OpenGL还是很麻烦的,但是都需要借助SurfaceHolder的,我们看一下市面上的一个3D效果桌面动态壁纸:
五、技术延伸
好了到这里我们就说完了Android中动态壁纸的几种玩法了,其实很简单,实现系统服务返回自己的引擎,在引擎回调中难道当前壁纸的SurfaceHolder,有了这玩意就可以做很多事了,当然这里最好了解一下Android中的视频开发,之前其实已经开设了一个专栏详细介绍了视频开发知识,可以去我的网站搜索,一张神图总结如下:
如果看懂这样图其实还有很多东西可以做,具体的就留给感兴趣的同学去做吧。
最后在来说一下为啥系统设置壁纸还需要权限呀?其实这里有一个问题如果没有权限那么用户的桌面就会被滥用,比如恶意者可以制作一个视频或者绘画一些信息比如这里暂时广告信息,然后在后台偷偷的设置了壁纸,这样用户的桌面就变成了广告了,这样用户也会疯掉的。所以权限肯定要有的。但是Android始终是Android,安全性的确和iOS没法比,我们通过抖音就可以看到Android版本下载之后直接就跳转到设置壁纸页面了,这样用户体验的确很好但是安全性其实不怎么好,而iOS下载完之后会提示你自己去系统设置页面进行设置壁纸操作:
这个细微的差距可以看到Android系统给出什么开发权限,iOS给出什么样的开发权限,个人看来偏向于iOS越安全越好。
严重说明
本文的目的只有一个就是学习逆向分析技巧,如果有人利用本文技术进行非法操作带来的后果都是操作者自己承担,和本文以及本文作者没有任何关系,本文涉及到的代码项目可以去编码美丽小密圈自取,长按下方二维码加入小密圈一起学习探讨技术
六、总结
我们在玩游戏或者应用的时候有时候不要只是一味的寻求欢乐,而不去思考别人家的技术怎么实现的,因为我们是世界上独一无二的程序猿所以玩应用的时候有什么好的技术和特效一定要有敏感性,最好是自己动手实践这样才能学习到更多,走的更远。最后祝愿抖音越来越好,微信越来越呵呵!
《Android应用安全防护和逆向分析》
点击立即购买:京东 天猫
更多内容:点击这里
关注微信公众号,最新技术干货实时推送