Daydream是Android 4.2的一个新特性。
可以将DayDream看作是一个互动式的屏幕保护程序,在设备闲置或充电时,可以显示特定的界面,比如一张图片,一个网页,任何android设备支持的界面显示。
Google Currents就是个很好的例子,这是一个移动杂志阅读应用,当设备闲置时,在用户的设备上输出杂志样式的文章。在Daydream模式下,会以聚合的形式显示一个看起来非常有趣的故事,点击这个故事,会全屏显示,再次点击,会打开Currents应用。
OK,那么我们现在就着手书写一个简单的DayDreamDemo:
1,首先我们要了解DayDream的一些主要方法:
Daydream的实现
Daydream是通过android.service.dreams.DreamService子类来实现的,
这是Daydream一些关键重写方法:
- onAttachedToWindow():初始设置
- onDreamingStarted():启动动画和计时器
- onDreamingStopped():停止动画
- onDetachedFromWindow():清除你在onAttachedToWindow()中构建的所有东西
- setContentView():设置Daydream场景
- setInteractive(boolean):默认情况下,用户触摸时Daydream会退出。如果你希望与用户交互,则调用setInteractive(true)
- setFullscreen(boolean):隐藏状态栏
- setScreenBright(boolean):默认情况下,Daydream是全亮度模式,设置为false会降低屏幕亮度
import android.service.dreams.DreamService;
public class DreamOne extends DreamService{
@Override
public void onAttachedToWindow() {
// TODO Auto-generated method stub
super.onAttachedToWindow();
setContentView(R.layout.activity_main);
//这里为了演示Daydream的简单效果只是加载一个静态布局
setInteractive(false);//是否可以互动,默认false
setFullscreen(true);//是否全屏,隐藏状态栏
}
@Override
public void onDreamingStarted() {
// TODO Auto-generated method stub
super.onDreamingStarted();
}
@Override
public void onDreamingStopped() {
// TODO Auto-generated method stub
super.onDreamingStopped();
}
@Override
public void onDetachedFromWindow() {
// TODO Auto-generated method stub
super.onDetachedFromWindow();
}
}
上面的代码片段中
onAttachedToWindow()中加载了一个静态布局。
3,配置AndroidManifest.xml文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.daydreamdemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<service
android:name=".DreamOne"
android:exported="true"
android:label="@string/app_name"
android:icon="@drawable/ic_launcher">
<span style="color:#ff0000;"> <intent-filter>
<action android:name="android.service.dreams.DreamService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter></span>
</service>
</application>
</manifest>
intent-filter保证了daydream会被系统正确寻找到。
最后,代码结构文件,大家可以看到非常简单。
这样,一个最简单的DayDream的静态图片展示完成了。