继承 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);
}
}
最后,在手机中设置
-->显示
-->屏保
中选择自定义的屏保;
网友评论