Android Intent putExra数据在检索器端不起作用

时间:2012-07-31 08:33:59

标签: android android-intent android-widget

我是Android新手, 我正在配置Activity的帮助下更新Widget上的TextView。它工作正常。需要更新相同的文本视图以刷新按钮单击。为此,我通过Intent传递Widget ID但在接收器端无法接收小部件ID,因此无法更新Text视图。

在Widget_Provider中设置Intent

Intent refreshIntent = new Intent(context, refreshWidgetActivity.class);
refreshIntent.setAction(ACTION_WIDGET_REFRESH);
PendingIntent refreshPendingIntent = PendingIntent.getActivity(context, 0, 
refreshIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.button3, refreshPendingIntent);
refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetIds[0]);

收到活动结束时,

Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID, 
AppWidgetManager.INVALID_APPWIDGET_ID);
}

if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
finish();
}

此处0是在附加内容而非小工具ID中找到的,请帮忙。

2 个答案:

答案 0 :(得分:0)

您是否尝试在创建putExtra之前调用PendingIntent

像这样:

Intent refreshIntent = new Intent(context, refreshWidgetActivity.class);
refreshIntent.setAction(ACTION_WIDGET_REFRESH);
refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetIds[0]);
PendingIntent refreshPendingIntent = PendingIntent.getActivity(context, 0, 
refreshIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.button3, refreshPendingIntent);

答案 1 :(得分:0)

我认为你必须管理一些旗帜。

如果我正确理解了您的问题,那么您正在尝试更新“活动”中的数据并传递额外内容。

您没有为您的Intent设置任何FLAG。另外,我真的不知道你的Intent在哪里以​​及它是如何发布的。但是,对于我自己的应用程序中的同类问题,我使用此解决方案:

我用两个标志设置了我的意图:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

通过这种方式,我的Intent将启动一个新任务(FLAG_ACTIVITY_NEW_TASK),然后它会将其清除为根状态(FLAG_ACTIVITY_CLEAR_TOP)(参见来源了解原因)。

然后,我的PendingIntent设置为取消当前,以确保只启动了一个实例(我认为不需要更多)

PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

通过这种方式,新的Intent将启动一个新任务,清除所有以前的数据并采用新的任务。 PendingIntent没有无用的重复。

它适用于我的情况,我认为它适用于你的。如果可以添加任何增强功能,请告诉我。

资料来源:http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP