安卓22开发文档翻译:白日梦服务,DreamService
extends
Service
implements
Window.Callback
继承这个类,就可以实现一个自定义的白日梦。
白日梦,指的是,在以下情况下启动的交互式屏幕保护程序:一个充电的设备处于空闲状态;或者设备被放置到桌面托架上。白日梦,为应用程序提供了另一种展现形式,可专门用于在展览形式下表现自身。
DreamService 的生命周期如下所示:
用来进行初始设置 ,例如调用 setContentView() 。
妳的白日梦已经开始,所以,妳应当启动动画及其它行为了。
在此处停止那些妳曾在 onDreamingStarted() 中启动的东西。
在此处销毁资源(例如,解除处理器和监听器)。
另外,onCreate和onDestroy(作为Service接口的一部分)也会被调用,但是,初始化和收尾工作应当在上面所说的那些钩子中进行。
为了让系统得知妳的白日梦的存在,应当 在清单文件中像下面这样声明妳的 DreamService :
<service
android:name = ".MyDream"
android:exported = "true"
android:icon = "@drawable/my_icon"
android:label = "@string/my_dream_label" >
<intent-filter>
<action android:name = "android.service.dreams.DreamService" />
<category android:name = "android.intent.category.DEFAULT" />
</intent-filter>
<!-- 指向关于 这个白日梦的更多信息 (可选) -->
<meta-data
android:name = "android.service.dream"
android:resource = "@xml/my_dream" />
</service>
如果加上 了一个 <meta-data> 元素 ,则表明, 会在一个单独的XML 文件中使用 <dream> 元素来定义关于该白日梦的额外信息。目前 ,妳能够提供的唯一一个额外信息就是, 可以提供一个设置活动,使得用户 对该白日梦的行为做出配置。例如:
res/xml/my_dream.xml
<dream xmlns:android = "http://schemas.android.com/apk/res/android"
android:settingsActivity = "com.example.app/.MyDreamSettingsActivity" />
这样的话,在系统设置界面中,妳的白日梦旁边会出现一个设置按钮,用户点击这个按钮就会打开这里所指定的活动。
要指定妳的白日梦布局的话,则,一般是在 onAttachedToWindow() 回调方法中调用 setContentView(View) 。例如 :
public class MyDream extends DreamService {
@Override
public void onAttachedToWindow () {
super . onAttachedToWindow ();
// 当用户点击时即退出白日梦
setInteractive ( false );
// 隐藏系统界面
setFullscreen ( true );
// 设置白日梦 的布局
setContentView ( R . layout . dream );
}
}
如果目标系统 的应用编程级别为 21 及更高版本,则, 妳必须在清单文件中为妳的服务声明 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>
</service>
自此版本开始引入 应用编程接口级别17
当窗口被关联到窗口管理器的时候,会调用此方法。参考 View.onAttachedToWindow() 以了解更多信息。
自此版本开始引入 应用编程接口级别17
当窗口与窗口管理器解除关联时,会调用此方法。参考 View.onDetachedFromWindow() 以了解更多信息。
自此版本开始引入 应用编程接口级别17
在以下时机被调用:此白日梦的窗口已经被创建,并且处于可见状态,现在可以开始动画了。
自此版本开始引入 应用编程接口级别17
当这个白日梦停止时调用此方法,可能的原因是:外部请求;或,在窗口还未被移除的情况下,调用finish()。 window has been removed.
自此版本开始引入 应用编程接口级别21
在以下时机会调用此方法:该白日梦被要求停止,并醒来。
在默认实现中,只是简单的调用 finish() ,它会立即停止该白日梦。子类 可以覆盖这个函数,以呈现出一个平滑的退出效果,然后再调用 finish() 。
注意,白日梦只会被给予一段短暂的时间(目前是大约5秒)来友好地醒来。如果白日梦没有按时醒来,则,系统会在时间用完之后强制结束它。
自此版本开始引入 应用编程接口级别17
将某个视图设置为这个白日梦的内容视图。与活动(activity)中 setContentView(android.view.View) 的行为类似,包括使用 MATCH_PARENT 作为该视图的布局高度和宽度。
注意 :这个方法要求有一个窗口存在,所以, 妳通常应当在 onAttachedToWindow() 中调用这个方法,而不能在更早的时候调用它( 不能 在 onCreate() 中调用它 )。
自此版本开始引入 应用编程接口级别17
实例 化一个布局资源,并且将它设置为这个白日梦的内容视图。行为类似 于 setContentView(int) 。
注意 :这个方法要求有一个窗口存在,因此不可以在 onAttachedToWindow() 之前调用。
layoutResID |
要实例化的资源编号。 |
自此版本开始引入 应用编程接口级别21
友好地让这个白日梦醒来。
会调用 onWakeUp() 以给予该白日梦一个机会来做一个平滑的退出效果。 当退出效果结束时, 该白日梦应当调用 finish() 。
未知美人
HxLauncher: Launch Android applications by voice commands