好久没写文章了,这几周应该都会写文章~~感谢大家长期的支持~

注:本文的测试机为小米5s ,可能不同手机会有一些兼容性问题,尝试解决下。

1概述

上周我推送了一篇Android 实现"透明屏幕",当时我看到之后就觉得特别感兴趣,也立即联系作者要了授权~~

感兴趣的原因是,我是内涵段子的资深用户,前段时间基本被一款叫火萤视频桌面的软件(就是将视频作为桌面)给刷屏了,所以看了下作者的代码,看到了SurfaceHolder,立刻想到了,肯定可以用来播放视频实现视频桌面的效果,于是周末尝试了下,果然很简单。

所以本篇文章无限感谢Android 实现"透明屏幕"一文,代码也部分参考自其提供的透明相机。

  • https://github.com/songixan/Wallpaper

效果图是这样的:

2实现

(1) 配置相关

首先编写一个xml文件,用于描述wallpaper的thumbnail、description、settingsActivity等,这里为了简单,仅设置了thumbnail。



<?xml version="1.0" encoding="utf-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android"
    android:thumbnail="@mipmap/ic_launcher" />

(2)编写代码

Wallpaper需要在屏幕上一直显示,其背后其实是一个Service,所以实现一个Wallpaper需要继承自WallpaperService,实现其抽象方法onCreateEngine,如下:

可以看到返回值是一个Engine,Engine为WallpaperService的内部类,其内部包含onSurfaceCreatedonSurfaceChangedonSurfaceDestroyedonTouchEvent等方法,看到这些方法,立刻想到了SurfaceView,关于SurfaceView相关知识可以参考:

此外,大家还记得在Android播放视频吗?

常规的做法有通过VideoView,除此以外还有通过MediaPlayer配合SurfaceView配合来实现,今天这个例子类似后者。

我们只需要通过MediaPlayer将解码的数据不断的输送到传入的Surface中即可。

代码非常简单,在onSurfaceCreated中去初始化mMediaPlayer,核心代码即为设置setSurface方法,这里我默认设置了静音。

onVisibilityChanged,即当桌面不可见时,我们要暂停播放,等回到桌面继续。

当onSurfaceDestroyed时释放资源~~

这样我们的VideoLiveWallpaper就写好了,别忘了他是个Service,需要我们去注册。

(3)设置为壁纸

注册完成后,我们在MainActivity中添加一个按钮点击设置为桌面背景,调用代码如下 这样就完成了代码的初步编写啦~~

(4)增加一些参数的支持

刚才我们设置了默认是静音,可能有时候我们会希望能够动态去控制视频桌面的参数,正常应该尝试去使用settingsActivity,不过我觉得其实广播也挺合适的,无非就是Service(可能在独立的进程)和Activity等通信嘛~~

这里我们增加一个复选框,支持设置开启声音or关闭声音。

Engine还有onCreate和onDestroy声明周期方法,可以在onCreate中注册动态广播,当接受到发送的action为ACTION_VOICE_NORMAL则开启声音;接收到发送的ACTION_VOICE_SILENCE则为静音状态。

最后直接在VideoLiveWallpaper中添加两个静态方法用于发送广播即可:

在Actiivty中:

监听一下CheckBox状态,发送广播即可。

ok,这样一个简单的视频桌面就完成啦~~

源码地址: https://github.com/WanAndroid/LiveWallPaper/tree/master/hongyang/MagicWallPaper

直接将这个目录以项目形式导入。

3总结

其实在Android 实现"透明屏幕"推送之后,后台存有一些负面的留言,可能觉得文章没有用处~

可能这里对没有用处的理解是“我项目中用不到”、“这玩意没有实际意义”,其实

我个人关注一个知识点,我会更加喜欢关注我从未用过的东西,比如WallPaper这个,除了在初学的时候在课本上见过以外,再也没用过,没想到还能这么玩;再者我会考虑这个东西还能做什么,是不是可以扩展一下,做个别的什么的玩意~

“这玩意没有实际意义”这个想法,怎么说呢,咱们程序员很多时候都非常实在,从自身去看很多东西都没有实际意义,这玩意我打死也不会装手机上使用,谁会放个视频做壁纸呀。

但是实际上,一个类似功能app自从推出之后,传播速度非常快,下载量也比较可观,自然会带来一定的收入。所以,偶尔接触一些奇怪的东西,如果其有自然传播能力,可以尝试做个app投放到市场试试,或许有一些收获呢~~

对了,这个项目实际上也是我的一个测试的项目,我准备做这样一件事,发起一个项目,然后让有兴趣的人加入进来,大家都在一个github仓库中以自己文件夹为单位进行提交代码。 比如本项目就有4个人参与,很开心目前有3个人都完成了该项目代码的提交。大家有什么想做的可以留言,后面我会将有相同兴趣的大家拉到一起,这样大家都在学习感兴趣的东西,且能互相参考,当然这是个纯靠自觉的仅用于学习的项目。

好了,如果有收获可以赞赏一下,感谢~~

ZZS 无论你是有 Java 基础希望学 Android 开发的程序员,还是想进一步提升能力的 Android 开发者,都可以在这个Udacity & Google 官方参与制作 的课程项目中找到适合自己的成长路径!

*独家硅谷技术课程

*行业领导者设计的实战项目

*一对一学习辅导

*名企颁发学习认证

*毕业直达滴滴面试

如果你有想学习的文章直接留言,我会整理征稿。如果你有好的文章想和大家分享欢迎投稿,直接向我投递文章链接即可。