我正在为我的应用程序开发一个小部件,我想将特定数据从小部件传递到应用程序。用户可以添加多个版本的小部件,我需要检测它来自哪个小部件,以便我可以在应用程序中显示特定信息。
到目前为止我所做的工作,但前提是我完全退出我的应用程序(反复按下后退按钮),否则它似乎没有检测到正在传递的数据。
这是我必须将数据从小部件传递到应用程序的代码:
public class WidgetProvider extends AppWidgetProvider {
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i=0; i<N; i++)
UpdateWidget(context, appWidgetManager, appWidgetIds[i]);
}
public static void UpdateWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId)
{
Intent intent = new Intent(context, Main.class);
final Bundle bun = new Bundle();
bun.putInt("widgetId", appWidgetId);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtras(bun);
PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setOnClickPendingIntent(R.id.widgetText, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
更新
多亏了 Tal Kanel,让这项工作接近完成。我ActionBar
在我的应用程序中有一个并遵循 Google 的指南,我在以下代码中有此代码onOptionsItemSelected
:
if (item.getItemId() == android.R.id.home) {
final Intent intent = new Intent(activity, Main.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
return true;
}
如果我单击 中的“后退”按钮ActionBar
,则最小化我的应用程序并单击小部件,此代码始终为空:
if (getIntent().getExtras() != null)
{
}
更新 2
实际上,只是回到我的应用程序中的主要活动会导致getExtras()
为空。我的应用程序小部件中有此代码,它不会向应用程序传递任何额外内容:
PendingIntent piMain = PendingIntent.getActivity(context, appWidgetId, new Intent(context, Main.class), PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.widgetTitle, piMain);
如果我在我的小部件中单击该部分,然后返回并单击我的小部件中应该传递附加功能的部分,getExtras()
则始终为空。