さて、私はデスクトップ ウィジェットを持っており、内部にはいくつかのボタンがあります。各ボタンはアクティビティを起動する必要があります。すべてが完璧に機能しますが、電話を再起動すると、ウィジェット ボタンが機能しなくなります。もちろん、ウィジェットを削除して再度追加すると、すべてが再び機能します。どうしたの?私は次のように実装しました:
マニフェスト
<receiver android:name=".MyWidget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
...
</intent-filter>
...
</receiver>
受信機
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
// in service, due to possible ANR erors
Intent newIntent = new Intent(context, UpdateService.class);
newIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
context.startService(newIntent);
return;
}
UPDATESERVICE (その INTENT SERVICE は標準の SERVICE ではありません)
private boolean update() {
...
popup.showShort("whoaaa - onUpdate");
i = new Intent(this, SettingsActivity.class);
pi = PendingIntent.getActivity(context, 2, i, PendingIntent.FLAG_CANCEL_CURRENT);
updateViews.setOnClickPendingIntent(R.id.btnSettings, pi);
i = new Intent(this, AboutActivity.class);
pi = PendingIntent.getActivity(context, 3, i, PendingIntent.FLAG_UPDATE_CURRENT);
updateViews.setOnClickPendingIntent(R.id.btnAbout, pi);
...
}
電話が再起動された後でも、すべての更新でポップアップが表示されます。receiver
したがって、再起動後に myがそのonUpdate
メソッドを実行し、それが my UpdateService
(そのインテント サービス) を起動し、そのupdate
メソッドが正しく実行されることは 100% 確実です。では、再起動後にウィジェットのボタンをクリックしても反応しない可能性はありますか? 登録された(または配信された)インテントがないように。
PS: 多分あなたは言うでしょう、私は の受信機を登録するBOOT_COMPLETED
必要がありますが、特別な作業を行う必要がある場合にのみ必要であることを知っています (たとえば、再起動後にアラームを再登録する - これは私の場合ではありません)。