0

携帯電話でホーム画面ウィジェットを再作成するたびに、onReceive() メソッドは呼び出されません。

問題は、その機能が onReceive メソッドにある割り当てたボタンの押下に応答しないことです..

この問題はエミュレーターにはありませんが、携帯電話でテストしたところ、反応しませんでした。

それに対する最善の解決策は何でしょうか?

4

1 に答える 1

0

これ以上詳細なものがないため(おそらく、レシーバーの登録方法と保留中のインテントのバインド方法に関するソースコード)。おそらく、お使いの携帯電話はスライド式のキーパッドを備えたモデルであるか、ホーム画面の向きが変わる可能性があります。ホーム画面の画面の向きが変更されると (または任意のハードウェア構成)、ホーム画面が膨張して再作成されるためです。したがって、ボタンの場合、最初にバインドされていたインテントは、再作成後に失われます。ドキュメント (申し訳ありませんが、リンクが見つかりません) によると、インフレータはリモートビューからのみ最新の更新を取得します。したがって、以下は機能しません

RemoteViews rv = ...;
// Assign the button to some pending intent
rv.setOnClickPendingIntent(View, pi);
AppWidgetManager.Update(...);

// And after sometime, you make changes to the rv
rv.setFloat();
// And update again
AppWidgetManager.Update(...);

それでも問題はなく、ボタンは期待どおりに保留中のインテントを起動しますが、何らかの理由で構成が変更され、ホーム画面が無効化 (および再作成) された場合、appwidgetmanager は指定されていない最後の更新に従ってのみ更新されます。クリックの意図について。

これに対する解決策は、リモート ビューを更新するたびに、保留中のインテントもすべて設定する必要があることです。それがパフォーマンスにどのように影響するかはわかりませんが、それが私ができる唯一の作業方法です. (しかし、私のウィジェットは毎秒16回のように更新されており、少なくとも動作します:)

于 2010-06-19T14:59:07.837 に答える