一、前言

最近玩抖音感觉都快废了,所以我决定不玩了我要学习所以先从他的动态壁纸学起,因为整个应用中也就是动态壁纸有点好玩的技术,而且也就是抖音能做这个功能,其他的短视频或许做不了比如快手如果要做你觉得有几个人会把老铁双击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越安全越好。

严重说明

本文的目的只有一个就是学习逆向分析技巧,如果有人利用本文技术进行非法操作带来的后果都是操作者自己承担,和本文以及本文作者没有任何关系,本文涉及到的代码项目可以去编码美丽小密圈自取,长按下方二维码加入小密圈一起学习探讨技术

六、总结

我们在玩游戏或者应用的时候有时候不要只是一味的寻求欢乐,而不去思考别人家的技术怎么实现的,因为我们是世界上独一无二的程序猿所以玩应用的时候有什么好的技术和特效一定要有敏感性,最好是自己动手实践这样才能学习到更多,走的更远。最后祝愿抖音越来越好,微信越来越呵呵!

手机查看文章不方便,可以网页看

http://www.520monkey.com


《Android应用安全防护和逆向分析》 

 点击查看图书详情

长按下面

Android中探究抖音短视频的动态壁纸功能以及拓展功能使用相关推荐

  1. Flutter为自己的App中引入抖音短视频

    最近字节开放了内容输出SDK,可以直接在应用中插入小说.视频内容.Flutter可以通过flutter_pangrowth插件,快速.无侵入的引入短视频到自己的APP中. 体验demo 仓库地址 集成 ...

  2. 晋丰佳创:抖音短视频里的版面内容复杂吗?这样设计的原因是什么

    抖音APP在面向国内用户时,因其独特的社交元素与自身内容形式上的丰富多彩,让不同年龄.不同阶层的人纷纷加入抖音进行使用.事实证明,抖音没有让他们使用者失望,平台将新鲜血液注入进去,人往往对新鲜和刺激的 ...

  3. 从零开始搭建仿抖音短视频APP-构建后端项目

    项目持续创作中... ​​​​​​仿抖音短视频APP项目专栏 目录 聚合工程 构建父工程 构建子工程 构建接口工程并且暴露api接口 优雅Restful相应封装 Lombok与多环境profile 数 ...

  4. 抖音短视频发布软件 短视频辅助发布工具

    抖音短视频自动发布软件是一款功能强大.专业性高.易于使用的软件,可以在抖音平台上实现自动发布.批量发布.定时发布等功能,从而提高曝光率和用户关注度,节省大量的人工和成本. 一.多账号发布管理 抖音短视 ...

  5. 成都中忻嘉业:提高抖音短视频播放量的三个小技巧

    抖音账号的权重越高那么抖音的播放量就越高,当然权重不是一下子都提上来的,中忻嘉业小编要分享一些从主观上分析来提高抖音短视频播放量的一些技巧.同一权重.同一视频,我们该怎样做可以获得更多的播放量呢?纯纯 ...

  6. 如何提取抖音短视频中的音乐

    刷短视频的时候,总会有被一些短视频魔性的背景音乐吸引着,当我们准备下载这个背景音乐的时候,却又不知道这个背景音乐叫什么,所以无法下载.没办法,我们要想听这个背景音乐只能将音乐从视频中提取出来了,那么如 ...

  7. 仿抖音短视频系统源码,android 时间戳转换

    仿抖音短视频系统源码,android 时间戳转换相关的代码 package util;import java.text.SimpleDateFormat; import java.util.Calen ...

  8. 抖音短视频源码中视频排序模块热门列表解决方案

    我们都知道,在短视频APP中会有推荐列表,不同短视频APP的推荐机制是不同的,有聚集流量的"中心化"推荐方式,也有对新手友好的"去中心化"推荐机制. 中心化推荐 ...

  9. 我的抖音视频服务器维护中无法看,抖音短视频怎么不能看?原因是什么?

    抖音已经成为了人们的一种娱乐方式,在抖音里面,可以看一些别人发的段子,并且也可以自己发抖音来记录美好的生活,抖音app给用户创造了很多不一样的玩法,也让很多用户从中感到快乐,但是有的时候,会出现抖音短 ...

最新文章

  1. 直接插入排序算法实现思想个人理解
  2. PM2管理node.js
  3. Statement和PraparedStatement区别
  4. shiro教程(4)-shiro与项目集成开发
  5. App设计灵感之十二组精美的家具产品电商App设计案例
  6. 以对象的形式动态获取宽高
  7. textmetric结构
  8. (转帖)开源容器集群管理系统Kubernetes架构及组件介绍
  9. Spring MVC-拦截器
  10. oracle连续状态相同,数据库共有三种状态:quiesce、resrict、suspend
  11. Anaconda3+Python3.6搭建Tensorflow
  12. updatebyprimarykeyselective的where条件是全部字段_多组连续数据对比,不满足单因素方差分析的条件怎么办?...
  13. ccf会议等级划分_Python计算山东新高考选考科目卷面原始成绩为等级成绩
  14. python opencv读取图像并生成plt文件
  15. SAP abap采购报表开发
  16. 通过webSocket实现app运动数据在网页实时显示
  17. 如何搭建Jenkins导出Unity安卓环境
  18. consoles打印数据库字段
  19. 使用PowerApps制作请假系统(一)--创建SharePoint列表以及PowerApps主题部分
  20. STM32之ADC配置,ADC_Mode模式理解

热门文章

  1. 【附源码】计算机毕业设计java校园心理咨询平台设计与实现
  2. 左连接、右连接、外连接、内连接、自连接的理解
  3. 最新版去水印小程序源码/基于WordPress的短视频去水印小程序源码
  4. 决策树——信息熵,熵增益率,基尼系数的计算说明
  5. 苹果7支持快充吗_苹果神操作:2020款新iPad配20W充电器 但不支持PD快充-苹果,iPad ——快科技(驱动之家旗下媒体)-...
  6. Android应用性能优化下电子书pdf下载
  7. DICOM图形转换(二)-- RTSTRUCT的勾画坐标数据转换
  8. windows系统 桌面时钟控件
  9. 并发编程七 AtomicUnsafe魔法类详解
  10. java批量导出pdf文件_java导出pdf文件