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

Posted

技术标签:

【中文标题】如何从小部件收听已关闭的活动? (onActivityResult只在Activity中)【英文标题】:How to listen to a closed activity from a widget? (onActivityResult is only in Activity) 【发布时间】:2011-04-22 17:26:53 【问题描述】:

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

有谁知道当 Activity 是启动 Activity 的小部件时,另一种监听 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); 
 

【问题讨论】:

【参考方案1】:

正如您所说,最好让 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);

【讨论】:

【参考方案2】:

看来我用错了方法。根据文档:

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

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

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

【讨论】:

以上是关于如何从小部件收听已关闭的活动? (onActivityResult只在Activity中)的主要内容,如果未能解决你的问题,请参考以下文章

Android:从小部件打开错误的活动

从小部件启动活动

onActivityResult 从未从小部件启动的活动中调用

如果活动在后台运行,则无需通过启动器即可从小部件恢复现有活动

Android - 如何从小部件访问房间数据库

在小部件中打开一个活动