这里讨论了一些类似的问题,但我的情况在某些时候确实有效。我正在开发一个小部件,单击该小部件时应启动属于同一包的活动。同样的活动也可以通过可能发布的通知来启动。小部件更新和通知发布由包中的服务完成。这是调用来发出 PendingIntent 的方法:
// Get pending intent for widget or notification
private PendingIntent getPendingIntent(int widgetId, int extraData) {
Intent clickIntent = new Intent(mCtx, OtdShowEvents.class);
clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
clickIntent.putExtra("OTDExtra", extraData);
clickIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendIntent = PendingIntent.getActivity(mCtx, 0, clickIntent,
0);
return pendIntent;
}
如果我在干净(重新启动)的设备上创建小部件的实例,小部件和通知都会按预期启动目标活动。但是,如果我删除小部件并创建另一个实例,则不再启动 Intent。同样,如果我完全卸载小部件,然后重新安装它并创建一个实例,则不会触发任何 Intent。但是,如果我关闭电源并重新打开(将小部件留在原处),它会在启动时再次工作。
我一路上看到的一个错误来自 PackageManager 说“找不到名称”,但指出包名称“com.ghcssoftware.OTD.full”,这是我的包的正确名称!
有任何想法吗?顺便说一句,我已经尝试了一些 PendingIntent 标志,例如 FLAG_CANCEL_CURRENT 和 FLAG_UPDATE_CURRENT,而不会影响这种行为。
FWIW,我发现本文中提供的代码片段正是我需要弄清楚如何让这一切正常工作,特别是对于我的小部件的多个实例等:PendingIntent in Widget + TaskKiller