2

さて、私はデスクトップ ウィジェットを持っており、内部にはいくつかのボタンがあります。各ボタンはアクティビティを起動する必要があります。すべてが完璧に機能しますが、電話を再起動すると、ウィジェット ボタンが機能しなくなります。もちろん、ウィジェットを削除して再度追加すると、すべてが再び機能します。どうしたの?私は次のように実装しました:

マニフェスト

<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必要がありますが、特別な作業を行う必要がある場合にのみ必要であることを知っています (たとえば、再起動後にアラームを再登録する - これは私の場合ではありません)。

4

1 に答える 1

1

絶対に理解できませんが、onUpdateメソッドからコードを追加すると(レシーバーで):

Intent newIntent = new Intent(context, UpdateService.class);
newIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
context.startService(newIntent);

それは機能しonEnabledます...しかし、私の更新メソッド(UpdateService内)が常に適切に起動されたため、理解するのは本当に難しいです。ポップアップが表示されました...

今では2回(onEnabledから、そしてその直後にonUpdateから)起動され、動作します...誰がこれを説明できますか? おそらくドキュメントから非常に重要なものを見逃していました。

編集:修正、時々しか機能しません....奇妙な

于 2012-07-12T11:48:56.137 に答える