android.service.dreams.DreamServiceを使ってみる
Android4.2から追加された模様なDreamService API(公式的にはDayDreamかと)をさっそく使ってみた。単純に言うとスクリーンセーバー機能。
AndroidManifest.xml
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="sample.test"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="17" android:targetSdkVersion="17" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:allowBackup="false">
<service android:name="SampleDreamService">
<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/dream" />
</service>
</application>
</manifest>
DreamServiceはService APIsなので
res/xml/dream.xml
<dream xmlns:android="https://schemas.android.com/apk/res/android" />
とりあえず設定項目は http://developer.android.com/reference/android/R.styleable.html#Dream を参照
SampleDreamService.java
package sample.test;
import android.service.dreams.DreamService;
public class SampleDreamService extends DreamService {
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
setInteractive(false);
setFullscreen(true);
setContentView(new SampleView(this));
}
}
大体はドキュメント通りでそのままですが、恐らくはDreamが開始された際にはonDreamingStartedが呼び出される。で、停止した場合にはonDreamingStopped等が呼び出されるんだと思われる。そこは未検証
SampleViewは以前書いたのでそちらを参照
エミュレータで動かす
インストールすると、「設定」 -> 「ディスプレイ」 -> 「スクリーンセーバー」に
というように出るようになる。で作ったやつを選択し右下のタイミングを変更しておく(変更しておかないと場合によって動作しない)。でエミュレーターなんでデフォルトで
スリープしない所にチェック入ってるのでこれを外しておく。っていうかこれ外さないとスリープモードにならないのでDreamが実行されない模様。あとはほっとけばスリープモードになった際に、設定したDreamServiceなスクリーンセーバーが起動する