混沌雑記帳






時計Widgetを更に更新。
スクリーンON/OFFに連動した更新ON/OFFを再実装した。

一度はずした理由は
・スクリーンOFFの状態(Widget更新OFF)でサービスが死ぬと復活が難しい
・AlarmMagaer.RTCなら端末スリープでは実行されないので問題ない
といったところ。

ただまあ、電池消費を考えると
・サービスを殺してしまうような使い方は考慮する必要なし
・メモリ圧迫などでサービスを止めざるを得ないときは仕方ない
という考え方でもいいかと。
RTCの場合、確かにスリープならOKなんだが
スクリーンOFFだけど無線LANなどを維持してると動いてるっぽい気も。

スクリーン検知は時刻読み上げでも使用してる。
時刻読み上げの都合上毎0分はスクリーンOFFでも起動したい。
ので0分だけRTC_WAKEUPにしておけばそこでサービスが復活する。

これで夜間など放置時の消費は最小限になるはず。
あとはONだけどWidgetが見えていないときの対応かなぁ。
アクティブなアプリがHOMEなら、とかやればいいのかな?
モバイル | Comments:0
(2011/12/02(Fri) 17:45:43)

Androidの実装って現場から考えたら抜けが良くあるのは珍しくないんだが、その一例。
センサー関連が標準APIで充実してていいなぁ、と思うとそこに罠がある。

センサーの扱い方は以下の通り。
1.SensorManagerを取得
2.SensorManagerから目的のSensorがあるか取得
3.SensorManagerに目的のSensorのListenerを登録
4.Sensorの値に変化があるとListenerが呼び出される
5.必要なくなったらSensorManagerから登録を解除

ちょっと見にはポーリングとかしなくていいなと思う。
いや実際、これでも実動作次第では問題ないともいえなくは無いんだが…。
問題になるのは4の"変化があると"という点。
センサーを起動してから変化があるまでは状態がわからないという問題がある。
別に取得関数もあれば問題ないけど照度センサーとかはそんなものないし。
というか単に、登録されたら即現状の値を通知するという動作をしてくれればで問題ないんだ。
(登録した側は数値を知らないんだから、当然"不定→何らかの値"に変化となる)

この挙動がTAB固有なのかAndroid全体なのか判らないが
そういうケースに回避できるルートが用意されて無い時点でちょっと検討足りてないんだろうなと。
MediaPlayerの不足とかWidgetProviderの不足とか見るにつけ誰もそこで疑問に思わないのかと。
まあ仕事でやってるわけでもない言語の壁の外の趣味プログラマじゃこんなところで愚痴るしかないんだがw
モバイル | Comments:0
(2011/12/02(Fri) 09:07:17)

どうも最近TABの電池の減りが早くなってきたなと思ったんだけど
本体の劣化の前にまずはアプリを疑うのがスマートフォンの基本。
バッテリー消費を見てみると自作の時計ウィジェットが問題になってるっぽいw
(色々弄ってるんで直近で上手く動いてなかったときのせいだとは思う)

とりあえず間違ってて動かなかった設定表示周りとか修正。
別々の要素でも個別にupdateAppWidgetしちゃいけないとか
PendingIntentはClass.thisにしておくべきとか、微妙なところで引っかかってた。
そのせいでPendingIntentがおかしなことになってたのも多分問題。

もう一つは時報機能。
TTSの試しで初期に判ってない状態だったから結構無駄が。
常にTTSプロセスを確保してるのは意味ないんだけど、そうしないと上手くいかなかったので。
他で試した結果、初期化-読み上げ-開放をする方法がわかったので変更。
結構コード的には面倒な事になるのが微妙なところだがw

後はWidgetの定期イベント(時刻書き換えタイミング)が常時動くのも問題か。
表示してない時に表示更新はいらないんだから止めたいんだけど…。
せめてスクリーンOFFのときだけでも止めるべきなのかなぁ?
Service側で検知なので、場合によってはWidgetが止まっちゃうんだよなw
AppWidgetProviderにonVisibleを追加して欲しいわ。
モバイル | Comments:0
(2011/11/30(Tue) 16:37:07)

Bluetoothイヤホンの新型。LBT-HP06LBT-HP05。(AV Watch)
これロジテックの03、04の後継だな。

どっちかといえば05だなやっぱり。
先代に比べるとイヤーピース部が長くなってハウジングが上になったから耳への干渉は小さそう。
後値段差がな。06が7000円で05が4000円とここまで違うとw

先代は幾らだっけと思ったら04が7000円、03が5000円だった。
ACアダプタ付もあってそれは1000円増と。
しかし直販では03が既に2500円まで下がってて笑う。
まあ後継でたから、だよねと。

しかしやっぱり試してみたいけど、普通のイヤホンは兎も角BTはないんだよなぁ。
モバイル | Comments:0
(2011/10/27(Thu) 18:36:13)

以前作ってMP4しか使えないんじゃ微妙じゃね?だったもの。
PCが新しくなってMP4エンコード中心になったので再調整。

とりあえず、MP4なら再生が出来るところまではOKだった。
ただシークに未対応でシークバーとかボタン触ると再生止まっちゃう。
というわけでその辺りの調査から。

MediaControllerにはsetPrevNextListenersというメソッドがある。
なにになんでシークボタン側のsetがないのかと思ったら
シークボタンを無効にするのはコンストラクタのフラグなのねw
これ使用中に切り替えるとかはありえないって思想なのかなぁ?
FastForwardボタン触ったときのListenerとかも設定できないし。
まあそこまでやるならカスタムで画面作れって話か。
しかし、ここまでやってふと気がついたのはシークバーはどうしようもねえw

というわけで今度はそもそもシークできないの?これっていう調査。
普通のApacheからMP4を再生してみる。あれ?シークできるぞ?
ということで何が違うのか各種ログを確認。

 あ、Rangeリクエストが処理できた場合のレスポンスって206だったのか。

という単なるhttpの把握漏れだったことが判明w
そりゃ途中からは取れないと判断すれば「再生できない」になるわな。
これでシークはできるようになった。が今度はファイル終端でエラーが出る。

 あ、Content-Rangeがないからか。

反応だけでやらんで一度はきちんと仕様に目を通すべきだねと反省。
というわけで、シークは問題なく出来ることが判明。
流石にローカルに比べてシークレスポンスは落ちる。
(シークした後に再生できるまでバッファ時間がかかるのだろう)
それでもWindowsファイル共有に突っ込んどくだけでローカル同様再生できるのは便利。

DLNAを使えばトランスコードも出来るし使えるアプリも多いんだけど
イマイチ鉄板的な組み合わせがないのがなんとも。
まあでもこれでちょっとは消費が早くなるかな?
この用途に関しては7インチのTABは正解だった。
やっぱり10インチは置かなきゃ無理。それだったらPCでいい。
10インチで主流のTegra2は動画的には残念な感じだったしなw
モバイル | Comments:0
(2011/10/20(Wed) 10:09:18)

 

Copyright © 混沌雑記帳. All Rights Reserved. [PHPウェブログシステム3 FLEUGELzネットマニア + 独自改造]