Service から加速度センサ監視

Auto Screen On という Android パケジがありまして、Screen Off する機能が入っていなかったので某所へのサンプル提示がてら色々確認していたのですが、どうも動作が芳しくなくて、むむむ、と言っていたところ、このパケジにはログの表示機能があるようで、こちらを確認しつつ解析してみようかな、と思いたった次第。
# 何らかの結論がある訳ではありませんのでその旨ご承知おき下さい。
例えばログの一部が以下。

2012.12.11 14:49:34 Start using sensor
2012.12.11 14:49:30 Stop using sensor
2012.12.11 14:49:29 Screen On

上記、Screen On になったらセンサの監視を止めていますね。Intent.ACTION_SCREEN_OFF な BroadcastIntent を監視しているものと思われます。あとは

  • 加速度センサの値の出力
  • Screen On になった時の使用時間などの出力

および「Service Recreated」とか「Create service」などいう出力です。これ、設定画面で

  • Service 起動
  • 通知出力
  • 自動で開始

などの制御をしているようなんですが、どうもこれまで自分が作っていたものの使用感てきに言うと加速度センサを監視している Service が止まっているのかどうなのか。
微妙な表現ではあるのですが、使ってる HUEWEI な端末が実機試験でログがきちんと取れず、非常に曖昧な表現にならざるを得ない部分、ご承知頂ければ幸いです。

色々確認している内に

onStartCommand なるナニを発見。

ありゃ、_サービスはシステムによる強制終了と再起動を考慮した設計にする必要があります。_てどーゆーことかな。

つうかこれ知らなんだ

通知出したまんまで死んでたのかなぁ。とりあえず onStartCommand 使わなあかんのは分かったんですが、やはりログ出力するパーツが欲しいな。

ログどうやって出してるのかな、と思いつつ睨んでいたら設定されているタイムアウト値の秒 (5s) が経過したらセンサの監視を開始してますね。おそらく Intent.ACTION_SCREEN_ON な BroadcastIntent に頼らない作りになっているのだろうな。
なるほど。てか何か違うな。このタイムアウト値は一体何だ。
センサの値に変動が無ければ、なタイムアウトなのかどうなのか。動かなくなって 5 秒待って何もなければセンサを、ということか。

  • SCREEN_ON でセンサの watch は停止
  • 5 秒まって動いてなかったら watch 再開?
    • あら?

そうじゃなくてこれって OFF が来ない保険なのかなぁ。なんとなく謎。

ログ

BroadcastIntent を Activity が捕まえて ListView に insert していけば良いのか。つうか差分を盛り込んで動作の確認したい。つうか実装がなんとなく微妙。

とりあえず

  • onStart を onStartCommand に
    • 引数の intent が null の場合のニゲ道を作る
    • START_REDELIVER_INTENT を戻す
  • 実は今、SCREEN_ON が来ないとセンサを監視しない形になってます
    • SCREEN_OFF でセンサ監視なソレを再起動してたり
    • このあたりのつくりが徹底的にマズい気がorz

て思いながらながめてみるに、根拠が不明な記述が沢山ありますねorz
そもそも wakelock も PARTIAL_WAKE_LOCK で云々してないですしorz

落ちつけ

とりあえずちょちょっと盛り込んで様子見を。(ぇ