如何从小部件收听已关闭的活动? (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中)的主要内容,如果未能解决你的问题,请参考以下文章
onActivityResult 从未从小部件启动的活动中调用