如何从小部件中收听已关闭的活动? (onActivityResult仅在Activity中)

时间:2010-10-08 05:46:02

标签: android android-activity android-widget widget

我有一个启动活动的小部件,但是当活动完成使用finish()时,我不知道我的小部件如何知道它,因为我无法覆盖onActivityResult(),这似乎是唯一的方法当活动结束时听......

任何人都知道在Activity启动活动的小部件时关闭活动的另一种方式吗?

如果它有帮助,这里是我在我的小部件中使用的代码来启动Activity

 @Override
 public void onUpdate(Context context,
     AppWidgetManager appWidgetManager, int[] appWidgetIds) {

 Intent i = new Intent(context, ChooseContact.class);
 PendingIntent pendingIntent = PendingIntent.getActivity(context,0,i,0);

 RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.main);
 updateViews.setOnClickPendingIntent(R.id.button, pendingIntent);

 appWidgetManager.updateAppWidget(appWidgetIds, updateViews); 
  // Not really necessary, just a habit
  super.onUpdate(context, appWidgetManager, appWidgetIds); 
 }

2 个答案:

答案 0 :(得分:0)

看起来我正以错误的方式接近它。根据文件:

  

当App Widget使用配置Activity时,Activity需要在配置完成时更新App Widget。

http://developer.android.com/guide/topics/appwidgets/index.html#Configuring

所以看起来我会从活动中更新小部件。

答案 1 :(得分:0)

正如您所说,Activity更新小部件更好。您可以覆盖Activity的onStop方法,并向窗口小部件发送一个Intent,要求它重绘...这样的事情:

@Override
protected void onStop() {
    super.onStop();

    // save settings
    // ...

    // update widget
    Intent intent = new Intent("com.mywidget.action.SETTINGS_CHANGED");
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { widgetId });
    intent.setData(Uri.withAppendedPath(Uri.parse(App.URI_SCHEME + "://widget/id/"),
        String.valueOf(widgetId)));
    sendBroadcast(intent);
}