http://developer.android.com/about/versions/android-4.2.html#Daydreamと、DreamServiceのソースコード見ながら作成。
AndroidManifest.xmlに以下を追加して、Serviceとして設定する。
<service android:name=".MyDream" android:exported="true" android:icon="@drawable/dream_icon" android:label="@string/dream_label" > <intent-filter> <action android:name="android.service.dreams.DreamService" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </service>
name,icon,labelは適切に書き換えるなり、付け足すなりする。
DreamServiceのサブクラスとして、MyDreamクラスを実装する。
(Activityみたいに実装できると言っています)
独自のライフサイクルを持っていて、ユーザ勝手に起動できない。システムが決められたタイミングで起動させる。
以下のコールバックメソッドをオーバライドして、好きな処理を実装。
@Override public void onAttachedToWindow() { } @Override public void onDreamingStarted() { } @Override public void onDreamingStopped() { } @Override public void onDetachedFromWindow() { } @Override public void onCreate() { super.onCreate(); } @Override public void onDestroy() { super.onDestroy(); }
onAttachechToWindow()を、例えば以下のように実装。
@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.dream); }
onCreate,onDestory()は、Serviceのインタフェース。
オーバーライドするときは、親メソッドを呼ぶようにする。
———————
詳しくはAPI Reference参照。
—————————————————–
■利用方法
・「設定」→「ディスプレイ」→「スリープ」を開き、スリープするまでの設定を短くする
・開発者向けオプションでスリープモードにしない(充電中に画面をスリープしない)をOFFにする
・「設定」→「ディスプレイ」→「スクリーンセーバー」にて、登録したServiceを設定
・スクリーンセーバー開始のタイミングを、「充電時」に設定すると勝手に起動するようになる
—————————————————-
■サンプル
http://sourceforge.jp/users/i07iwami/pf/android_workspace/scm/tree/master/DayDream/
以前作った○×ゲームをそのまま流用してスクリーンセーバー上に乗っけてみた。
Toastが上手く表示されないみたい。