Minutes Widget for Android (初音ミクVer) 、1.0.4 リリースしました。

朝にはリリースしたのに、ご報告が遅めの昼休みになってしまいましたが。
愛用していただいている方、ありがとうございます。
仕事の合間の作業でどうしてもリリース遅れがちですが、なんとかメイン機能フル実装前の最後のリリースを今朝実施しました。

今回の付加機能としましては、

•ミクのメッセージ表示欄が半透過になりました。
→ 利用者の方からのご希望だったので追加しました。
•複数サイズのウィジェット表示に対応
→ 前回の1x4サイズ修正時に、2chの発言中に配置時にサイズ変更ができるようにしてほしい、画面半分くらいでもよいというような発言を見かけました。
今回の機能追加はその対応です。
1Line(アイコン1x4個分、最新版基準サイズ)、Small(オリジナルリリース時サイズ、アイコン1x3個分)、Large(画面半分、アイコン2x4サイズ)の3サイズから選択してウィジェットの登録が行えるようになりました。
•メッセージの追加
→ 前回、荒い状態で出していましたので、メッセージ内容のウインドウサイズに合わせた修正作業、ほか、少しの修正を行いました。

今後の実装予定(予定)

1)1.0.5リリース予定

•発言ログの履歴閲覧画面実装(外部アプリからのアクセスインテント公開)
クリップボード簡易履歴管理画面実装
•簡易ランチャ機能。

更新履歴:

Ver. 1.0.4 (8/06)
•ミクの吹き出しが半透明になり、背景が透けるようになりました。
•ミクを配置時にサイズの選択が1Line(1x4)、Small(1x3)、Large(2x4)の3つから選択出来るようになりました。
•メッセージ内容を微調整しました。
Ver. 1.0.3 (7/31)
•ミクに影が付きました
ウィジェットサイズが横1列に変更されました。
•メッセージが増えました。
•ミクをクリックすると現在時刻を発言するように修正されました。
Ver. 1.0.2 (7/28)
•消費電力対策としてandroid:updatePeriodMillisによる更新をやめました。
•ミクが瞬きするようになりました。
Ver. 1.0.1 (7/23)
•キャラクタ描画を2パターンから自動書き換えするように修正しました。
Ver. 1.0.0 (7/23)
•初公開

AndroidのappWidget作成時に行っておくべき消費電力対策についてのまとめ(その1)

先日記載したセンテンスばらばらの試行記録を消費電力対策の部分だけ整理しました。
今後も、何か見つけたらエントリ起こしていきたいと思います。

消費電力に対して影響を与えうる内容。

  1. AppWidgetProviderの更新周期をres/xml/*.xml側のandroid:updatePeriodMillis定義によって行っている。

そのことによるメリット

  1. 実装が非常に楽。(onUpdateをオーバーライドして実装を記述するだけでよい)

そのことによって起こる現象とバッテリーへの影響

  1. Homeがアクティブ状態になくても更新リクエストを繰り返す。
  2. そのため、デバイスがスリープ状態でも更新処理が走り、電池を消耗する。

対策方法概要

  1. res/xml/*.xml側のandroid:updatePeriodMillisに値ゼロ[0]を指定し、システムからのonUpdate呼び出しを停止する。
  2. AppWidgetProvider.onUpdateの呼び出しをAppWidgetProvideronReceive側から呼び出し行うように処理を変更する
  3. onUpdate内にAlermManagerを作成して、指定時間で自分自身にintentを投げるように設定する。*1
  4. この際、投げるintentには必ず、ウィジェットIDを添付する。

PublicMethodsの呼ばれ方比較

android:updatePeriodMillisに0以外の値を定義した場合の動き
  1. Widget配置時
    1. onEnabled => onReceive
  2. updatePeriodMillis周期時
    1. onReceive
  3. Widget解除時
    1. onDisabled => onDeleted
android:updatePeriodMillisに0を定義した場合の動き
  1. Widget配置時
    1. onEnabled => onReceive
  2. updatePeriodMillis周期時
    1. 0指定のため、イベント起動がなし
  3. Widget解除時
    1. onDisabled => onDeleted

実装時注意点

  1. SowftwareUpdate、最初の画面へのアクティブ化等の際、onUpdateは必ず1回呼ばれるので、起動、初期化等は常にここで行えばよい。
  2. AlermManaerは電源OFF、アプリケーションのバージョンUp/アンインストール時などに内容が消える。影響があるのは電源OFFだけなので、Intent.ACTION_BOOT_COMPLETEDに対する対応も必要。*2
  3. appWidgetProviderへの通知をAlarmManagerで行う場合、
    1. PendingIntentを用いてIntentを設定する必要がある。
    2. PendingIntentへAppWidgetProider向けのIntentを定義するためのメソッドはgetBroadcastである。
    3. AlermManaerを定義する場合、引数としてAlarmManager.ELAPSED_REALTIMEまたはAlarmManager.RTCを指定する必要がある。*3
    4. AppWidgetProvider.onReceiveからAppWidgetProvider.onUpdateを起動する場合、投げるIntentにウィジェットIDを付ける必要あり
    5. ウィジェットIDは最初のonUpdateの最初の呼び出し時に第3引数として入ってくる物から得る。この値のUri化は下記の通り
    6. onReceive(Context context,Intent intent)からonUpdateを起動する場合、onUpdate(context, AppWidgetManager.getInstance(context), ウィジェットIDを配列化した値)で行える。

思いついたのはこのくらいかな〜。

次回は1アプリなのに、複数のサイズ定義が可能なウィジェットの作成方法をドキュメント化したいと思いまーす。

*1:ここをServiceでやろうとすると、Android自体がリソースをあけるために行うリソース整理作業のため、Service自体がsystemにより殺されてしまっている場合がある。

*2:下記参照: http://www.taosoftware.co.jp/blog/2009/03/alarmmanager_4.html

*3:_WAKEUP付きを指定してしまうと、結局、スリープ中も強制呼び出しがかかるので注意すること。

ふう、今回はなかなかいい感じです。

先週末の作業の煮詰まりっぷりといったら無かった訳ですが
今週はだいぶいろいろ行けそうですよ?

というわけで、新しいキャプチャ画像を2枚ほど。

まだまだ調整中なところ多いですけど、どんな感じですか?

ちなみに、作成方法などの記事は数日中に書かせて頂こうと思います。

デスクトップマスコットに出来る事もまだまだありますよ!

Minutes Widget for Android (初音ミクVer) 、1.0.3 リリースしました。

大変ご迷惑をおかけするのを連発してすいません。
28日にリリースしていたつもりになっていた省電力機能、私の方のアップロードミスにより、リリースに失敗している事が解りました。
それに伴い、暫定ですが,1.0.3を代替リリースさせて頂きます。

愛用して頂いている方、消費電力の件、また、リリースミスの件につきまして大変ご迷惑をお掛けしました。これでやっと、消費電力の件、なんとか解決する物と思います。
(なお、たまたま偶然ですが、リリースミス中も私のHT03A側で電力消費量の計測をしておりまして、その結果、「スリープ中の消費電力量はMinutesWidgetに関する限り」ほぼ横ばいまで低減できた事をご報告できます。)

また、その他の付加機能としましては、

•ミクに影が付きました。
→ 利用者の方からのご希望だったので追加しました。遅くなりましたすいません。
•メッセージの追加
→ あまりにも発言パターンが少ない、ということで実装予定の事などを追記しました。ただし、暫定リリースのため、メッセージの見た目整形などが上手くいっていない物があると思います。
•表示サイズが1x3の横長3マスから1x4の横1列に変更されています。
→ 表示が崩れてしまうなどの場合、一度ウィジェットをゴミ箱に捨てて、再表示してください。
•ミクをクリックすると、表示中のメッセージに寄らず、現在時刻を発言するようになりました。
→ 実際は今後、ミククリックではメニューが出るようになるのですが、暫定対応のためこうなりました。
というのが機能実装されております。

なお、今後実装予定の内容を公開する事としました。

1から順に実装優先順位の高い順となります。

1)発言ログの履歴閲覧画面実装(外部アプリからのアクセスインテント公開)
2)クリップボード履歴閲覧画面実装
3)設定画面追加(目パチ、口パク周期/不可設定追加)
4)発言内容強化(バッテリー残量通知、当日スケジュール通知、Tenki.jp連動天気表示機能等)
 → 電力消費量なども考慮すると、Tenki.jp連動天気表示機能は実装しない可能性もあります。
5)設定画面追加(時計の書式設定)
6)キャラクタペルソナ(スキン[透過PNG]+発言リスト[xml書式])交換機能
7)キャラクタペルソナネットワークダウンロードメニュー提供
8)簡易ランチャ/センサー切換

ご意見などありましたら、どうぞコメント等でよろしくお願いいたします。

更新履歴:

Ver. 1.0.3 (7/31)
•ミクに影が付きました
ウィジェットサイズが横1列に変更されました。
•メッセージが増えました。
•ミクをクリックすると現在時刻を発言するように修正されました。
Ver. 1.0.2 (7/28)
•消費電力対策としてandroid:updatePeriodMillisによる更新をやめました。
•ミクが瞬きするようになりました。
Ver. 1.0.1 (7/23)
•キャラクタ描画を2パターンから自動書き換えするように修正しました。
Ver. 1.0.0 (7/23)
•初公開

なんとかAppWidgetManagerの取得方法が分かった件

旧聞になりますが、昨日書き遺していたAppWidgetManagerの取得方法、無事見つけました。

google groupsのandroid-developers内*1でその方法を発見しました。

AppWidgetManager.getInstance(context);

これで取ってこれるようです。
なんだー、スタティックでもコンテクスト情報があればInstance持ってこれるのかー。
というわけで、昨日、なんとか新バージョンのリリースが出来ました。

追記:
トラックバックでも合わせて教えていただいておりました。
adakoda様の「[Android] AppWidget と省電力化について」*2、ありがとうございました。

あと、読みやすさの件でも、同一発言グループごとに単一エントリになるように今後のエントリについては気をつけたいと思います。はてなって使うのが初めてでして、技術者としてはダメな事に、超適当に使っておりました。
ちょっと後で昨日のエントリで書いたことの整理エントリでも作りますね。

Minutes Widget for Android (初音ミクVer) 、1.0.2 リリースしました。

大変長らくお待たせしました。

Minutes Widget for Android (初音ミクVer) 、1.0.2 リリースしました。

愛用して頂いている方、消費電力の件につきまして大変ご迷惑をお掛けしました。
Minutes Widget1.0.2、本日リリースさせて頂きました。
リリースまでに時間がかかってしまい大変申し訳ありません。
今回、一応、私の方では消費電力対応版として考えている仕組みを導入しております。具体的には、Sleep状態で不要な更新処理が走らないような実装に変更しております。これにより、常に携帯を触っているような方以外についてはある程度の効果があるのではないかと思っております。

# まだ完全なバッテリーベンチマークが取れておりませんので、仕様変更によって
# 劇的に変化しているかどうかの保証は出来ませんが、試して頂いて効果のほどを
# 教えて戴ければ幸いです。

また、その他の付加機能としましては、合わせまして、今回よりミクが目パチする
ようになっております。

とりあえず、制作者としては、ホームを占拠するタイプのマスコットのくせに
•アニメーションしない、
吹き出し出っぱなし、
•キャラ絵が差し替えできない
というの3重苦のうち、なんとかまずは目パチアニメが組み込めた、という事で、
少しだけ満足しております。

また、消費電力の件、今後も対応を続けていきたいと思います。
(今後の予定としては、目パチ、口パクの周期設定など、アニメーション周期の設定
項目を追加し、アニメーション不可を下げたり、上げたりできるようにと考えています。)

とりあえず、ここまではマスコットとしての部分を優先してきましたが、次の更新からは出来るだけ機能面の追加、という事を視野に入れて修正を掛けていくと思います。

ご意見などありましたら、どうぞコメント等でよろしくお願いいたします。


更新履歴:
Ver. 1.0.2
•消費電力対策としてandroid:updatePeriodMillisによる更新をやめました。
•ミクが瞬きするようになりました。
Ver. 1.0.1
•キャラクタ描画を2パターンから自動書き換えするように修正しました。
Ver. 1.0.1
•初公開

で、現在の問題点。

で、実はまだ最後で詰まっていて、リリースが出来ておりません。
具体的に言うと、onReceive内からonUploadを呼び出す際に使用するAppWidgetManager appWidgetManagerの取得で詰まっています。

んがー、これどうやんだぁぁぁぁぁ。



※参考URL
// Intentに関する資料
http://www.次世代創造機構.jp/android/androidLecture/Intent2/Intent2.html
// 使用可能な暗黙的Intentの例
http://tmbl.ngsdev.org/post/142880113/1-uri-uri
http://www.openintents.org/en/intentstable
// AlermManager系(Taosoft様)
http://www.taosoftware.co.jp/blog/2009/02/alarmmanager1_android_cron.html
// AppWidgetクリック時にIDを渡す
http://xfutures.jp/2009/06/21/37/