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(其意图服务不是标准服务)

    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);

                   ...
        }

最好的是,即使在手机重新启动后,我也可以在每次更新时看到弹出窗口。所以它 100% 确定在重新启动后我receiver运行它的onUpdate方法,它会触发我的UpdateService(它的意图服务)并且它的update方法运行正确。那么,重新启动后,我的小部件中的任何按钮都不会对点击做出反应,这怎么可能呢?就像没有注册(或交付)意图一样。

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中)总是被正确触发,我看到了弹出......

现在它被触发了两次(从 onEnabled 触发,然后立即从 onUpdate 触发)并且它可以工作......请谁能解释一下?我可能错过了文档中非常重要的东西。

编辑:更正,它只在某些时候有效....奇怪

于 2012-07-12T11:48:56.137 回答