3

Error: appWidgetId (EXTRA_APPWIDGET_ID) was not returned from the \widget configuration activity.

public class WidgetConfigure extends Activity {

private int widgetID;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.v("Lifecycle", "WidgetConfigure.onCreate");
    setContentView(R.layout.widget_configure);
    widgetID = this.getIntent().getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
    setResult(RESULT_CANCELED, new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetID));
}

public void onButtonClicked(View view) {
    Log.v("Lifecycle", "WidgetConfigure.onButtonClicked");
    if (((RadioButton) this.findViewById(RefreshStrategy.SYSTEM)).isChecked()) {
        WidgetProvider.configure(widgetID, true);
    } else if (((RadioButton) this.findViewById(RefreshStrategy.USER)).isChecked()) {
        WidgetProvider.configure(widgetID, false);
    }
    setResult(RESULT_OK, new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetID));
    finish();
}
}

理论上RESULT_OK应该在活动中按下按钮后发送,RESULT_CANCELED在任何其他情况下,但在按下设备上的物理按钮 HOME 时不会发生。

任何想法如何解决这个问题?

4

1 回答 1

1

这不是您的代码中的问题 - 这是正常的标准 Android 行为。(也许是一个错误?)


我找不到它的文档,但是如果您尝试添加需要配置的 Google 小部件,然后按 HOME,您会看到这些小部件没有被添加。在某种程度上,我们可以将 HOME 键视为一个 CANCEL 按钮。

我今天大部分时间都在想我自己的代码有一个错误,并寻找一种方法来修复它。

如果有的话,我相信这可能是框架中的一个错误,因为根本没有交付结果。此外,如果我Activity从配置活动启动一个新的然后从那里退出,我会遇到类似的失败。


FWIW 我在 Galaxy Nexus 4.2.1 上收到该错误消息;但在 Nexus 7 4.4.2 上未显示错误,但行为是相同的。


更新:根据 Dianne Hackborn 的说法,这是预期的行为,至少从用户的角度来看:

将提供配置 UI 的应用程序小部件的正常体验是从那里按返回或主页将取消添加。

因此,作为开发人员,这可能看起来很奇怪,但作为用户,最终一切都很好。

于 2014-02-11T16:51:57.477 回答