继承 DreamService来实现一个自定义屏保
简介
Dreams是Android设备的新型互动屏保模式。当设备置入底座或充电闲置状态时(屏幕没有关闭),此模式自动激活。白日梦模式每次显示一个,可以是纯粹的视觉效果,在用户触摸时消失,也可以是响应用户所有输入的交互式应用。您的白日梦将运行在您应用的进程内,并可以访问所有的AndroidUI工具包,可以使用视图、布局和动画等。所以它比动态壁纸或应用窗口小部件更具表现力。
作用:
Dreams是当充电的设备空闲,或者插入底座时显示的互动屏保。在展览或陈列时,Dreams为APP提供一个定制的展示方式。
比如现在各个手机厂商定义很炫酷的充电动画!
DreamService的生命周期
- 1.onAttachedToWindow()
初始化设置; -
- onDreamingStarted():启动动画和计时器 ;互动屏保已经启动,这里可以开始播放动画或者其他操作
- 3.setContentView()置Daydream场景
- 4.setInteractive(boolean):默认情况下,用户触摸时Daydream会退出。如果你希望与用户交互,则调用setInteractive(true)
- 5.onDreamingStopped()
在停止 onDreamingStarted() 里启动的东西 - 6.onDetachedFromWindow()
清除你在onAttachedToWindow()中构建的所有东西 可能会调用的一些重要方法(比如 handlers 和 listeners) - 7.setFullscreen(boolean):隐藏状态栏
- 8.setScreenBright(boolean):默认情况下,Daydream是全亮度模式,设置为false会降低屏幕亮度
manifest 声明
为了能让系统调用,你的 DreamService 应该在 APP 的 manifest 中注册,必须在其中加入具有”android.service.dreams.DreamService”动作的intent-filter。当目标api>=21,必须在manifest中申请BIND_DREAM_SERVICE权限:
<service android:name=".MyDream" android:exported="true" android:icon="@drawable/my_icon" android:label="@string/my_dream_label" android:permission="android.permission.BIND_DREAM_SERVICE"> <intent-filter> <action android:name="android.service.dreams.DreamService" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <!-- Point to additional information for this dream (optional) --> <meta-data android:name="android.service.dream" android:resource="@xml/my_dream" /> </service>
MyDayDream.java 互动屏保的定义
public class MyDayDream extends DreamService { @Override public void onAttachedToWindow() { super.onAttachedToWindow(); // Exit dream upon user touch setInteractive(false); // Hide system UI setFullscreen(true); // Set the dream layout setContentView(R.layout.my_day_dream); } }
最后,在手机中设置-->显示-->屏保 中选择自定义的屏保;。
- 本文固定链接: http://jingyan.idoubi.net/4822.html
- 转载请注明: 游戏创作者大陆 于 逗分享开发经验 发表