2011年07月29日

[My docomo checker] 1.6.8を公開しました(アカウント登録時のバグ修正)

◆バグ修正
・アカウント登録画面でOKボタンを押した時、強制終了する場合があったため、修正しました

posted by meloncake at 00:30| Comment(11) | TrackBack(1) | my docomo checker
この記事へのコメント
はじめまして。My Docomo checkerを使わせていただいております。とても便利なツールで便利に使用させていただいております。
ここで質問をするような内容でないと思うのですが、悩んでおりまして、差し支えなければご返答をいただけたら大変うれしいです。
質問なのですが、私もAndroidでWidgetを使用したアプリを作成しております。Widgetをタッチした際にActivityを表示するように作成しております。ただ、TaskKillのtoolで全体を削除してしまうと、それ以降Activityが表示されなくなります。しかし、My docomo checkerでは、taskkill後もactivityが表示されるので、どのように作成されているのかご確認したくコメントさせていただきました。
ちなみに、Activtyの表示方法は、AppWidgetProviderを継承し、onUpdateメソッドでPendingIntentのgetActivityで呼び出すようにしております。なにかしら、再起動する仕組みを組み込んでいらっしゃるのでしょうか。
宜しくお願い致します。
Posted by Katoppe at 2011年09月29日 01:13
> Katoppeさん

参考になるかわかりませんが、My docomo checkerでの実装方法を記載しておきます。

・AppWidgetProviderを継承したクラスのonUpdateメソッドでPendingIntentを発行しています(同じですね)

・PendingIntentのgetActivityでActivityを直接呼び出すのではなく、getBroadcastメソッドでBroadcastReceiverを呼び出します。

・呼び出されたBroadcastReceiverのonReceiveメソッド内でActivityを立ち上げています。

答えになっておりますでしょうか?

よろしくお願いいたします。
Posted by meloncake at 2011年09月29日 04:45
ご返信ありがとうございます。早速、同じ実装を試してみます。
Posted by katoppe at 2011年09月29日 08:53
こんにちわ。実装した結果をご報告させていただきます。

結果として修正前と同様にActivityが実行されませんでした。タッチイベントが発生していない(タッチ時のオレンジの枠が表示されない)感じに見えました。

再度ご質問なのですが、
1.AppWidgetProviderからBroadcastReceiverの実行はPendingIntentのsendメソッドを使用されていますか。
2.BroadcastReceiverでActivityを呼び出す際は、PendingIntentのgetActivityを使用されていますか。
3.PeindingIntentの起動は、RemoteViewのsetOnClickPendingIntentをトリガーとして設定されているのでしょうか。(LinerLayoutのidと2で指定したPendingIntentを設定)

お手数をおかけいたします。宜しくお願い致します。
Posted by katoppe at 2011年09月29日 12:27
カラーUIについて
その行のどっか空いてるところで構わないので現在の設定値を表示する様にしていただけるとどんな設定をしているか控えておけるのでお願いします。

あと設定のハイライトにチェックを入れた時、
ウィジェット側の文字色は黒ですか?以前は空色?で見やすかったのですが。
ウィジェットの設定でハイライト時の文字色設定もあると便利かと思います。
Posted by rpc at 2011年09月30日 16:10
記事が古かったですね。。
最近更新されてないのでしょうか?

先のカキコは2011/9/29のVer.1.7.0向けです

m(_'_)m
Posted by rpc at 2011年09月30日 16:12
>katoppeさん

ご質問の件ですが、
1:いいえ 2:いいえ 3:はい
となります。

ソースを確認したところ、
下のように処理しています。

AppWidgetProviderのonUpdateメソッドで

Intent i = new Intent(context, MyBroadcastReceiver.class);
i.setAction("MyAction");
PendingIntent pi = PendingIntent.getBroadcast(context, appWidgetId, i, 0);
myRemoteView.setOnClickPendingIntent(R.id.my_layout, pi);
appWidgetManager.updateAppWidget(appWidgetId, myRemoteView);

のように処理し、MyBroadcastReceiverのonReceiveメソッドで

Intent i = new Intent(context, MyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setAction(intent.getAction());
context.startActivity(i);

のように処理しています。

わかりにくい説明で申し訳ありません。
Posted by meloncake at 2011年10月03日 18:53
>rpcさん

ご提案ありがとうございます。
カラーUIとハイライト色の件、
1.7.1でリリースする予定です。

ブログの件についてはバージョンアップの度に記載しているのですが、
1.7.0の記載が遅れております。申し訳ございません。
Posted by meloncake at 2011年10月03日 18:55
こんにちわ。ご丁寧なご説明ありがとうございます。問題の箇所がわかりました。
今回のご説明で同じようなロジックでテストを行ったところ、説明をいただいた箇所以外での処理を追加していたことにより問題が発生していたようです。
------------
onUpdateのappWidgetIdsのforLoop内で

Intent i = new Intent(context, MyBroadcastReceiver.class);
i.setAction("MyAction");
PendingIntent pi = PendingIntent.getBroadcast(context, appWidgetId, i, 0);
myRemoteView.setOnClickPendingIntent(R.id.my_layout, pi);
appWidgetManager.updateAppWidget(appWidgetId, myRemoteView);

の処理後、widgetに表示処理を行うServiceを実行しております。
そのServiceではRemoteViewに対して表示内容を変更した後に再度updateAppWidgetを呼び出しており、そのupdateAppWidgetをコメントアウトしたところ、プロセスをKillしてもwidgetのクリックが反応するようになりました。
そこで、setOnclickPendingIntenの処理をService内で行うようにしたところ動作するようになりました。(今のところ問題なさそうです。)
(Serviceは処理後、終了するように処理をしています。)

# updateAppWidgetの処理については憶測でしか判断できませんが...
# 通常時は、updateAppWidgetの処理は追加(上書きされず)できるけども、
# プロセスKill後の再スタート時は、最後のupdateAppWidgetしか再設定されない...ということなのでしょうか。
# (私の理解度が低すぎますね><)
# 再度検証が必要です。

わかりにくい説明で申し訳ありません。
お手数をおかけ致しました。ありがとうございました。
ちなみにMyDocomoCheckerでのWidget内の表示はどのように行われていますか。

Posted by katoppe at 2011年10月05日 11:26
>katoppeさん

My docomo checkerでは下記のように処理しています。参考になりますでしょうか。
※ずいぶん昔(Android1.5〜1.6)に実装したので、古いやりかたかもしれません

1.My docomoデータの更新処理をServiceで実行しています

2.Serviceでのデータ取得処理が完了したら、MyAppWidgetProviderをIntentとしたAlarmをAlarmManagerへ即時処理するよう予約しています

3.上記IntentのActionは AppWidgetManager.ACTION_APPWIDGET_UPDATEにしておき、Extras(AppWidgetManager.EXTRA_APPWIDGET_IDS)へwidgetIdをint配列で格納しておきます

4.Alarm起動時にMyAppWidgetProviderのonReceiveが呼び出され、ActionがACTION_APPWIDGET_UPDATEになっていることから、super.onReceiveのなかでonUpdateが呼び出されます

5.このonUpdateの処理内でremoteViewを描画し、OnClickPendingIntentを設定しています

6.onUpdateの上記処理後、appWidgetManager.updateAppWidgetを呼び出して処理を完了します

Posted by meloncake at 2011年10月06日 06:09
こんばんわ。
さっそくのご返信、ありがとうございます。
Serviseありきのアプリなのですね。私の場合、Widgetを登録したらデータ参照を行うような仕組みで考えていました。
また、質問させていただく場合があるかも知れません。その時もどうぞ宜しくお願い致します。本当にありがとうございました。
Posted by katoppe at 2011年10月06日 23:06
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/47007844

この記事へのトラックバック

My docomo checkerというソフトを使用してみた
Excerpt: */ //--> My docomo checkerというソフトを使用してみまし
Weblog: もそむらのつぼやき
Tracked: 2011-09-01 00:38