【发布时间】:2011-09-05 02:57:58
【问题描述】:
我想做的与“ColorNote”应用程序非常相似。基本上我有可以启动“EditNote”活动的应用程序小部件,我只想要任务中的一个活动实例;假设用户 1. 点击小部件 A 启动“EditNote”A,2.回到家,3.点击小部件 B 启动“EditNote”B,4.然后点击返回按钮,用户应该登陆主屏幕。我将 rowIds 存储在 sqlite 数据库中,并传递感兴趣的行 id 以获取“EditNote”活动。
我尝试将“launchMode”设置为“singleTask”或“singleInstance”,Android 将绕过“onCreate”并直接调用“onNewIntent”(这是预期的,因为它已记录),但问题是每个时间“EditNote”然后获得包含相同 rowId 的相同意图,因此将启动“EditNote”A 上面的第 3 步。 (如果“launchMode”设置为“standard”,则任务将包含多个具有正确 ID 的“EditNote”活动。)
这是appWidgetProvider中的sn-p代码:
int rowId = dataAccess.getIdByAppWidgetId(appWidgetId);
intent.putExtra(NoteColumns.ID, ((Integer)rowId).longValue());
PendingIntent pending = PendingIntent.getActivity(context, appWidgetId,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.appwidget, pending);
appWidgetManager.updateAppWidget(appWidgetId, views);
“EditNote”活动中的代码:
@Override
protected void onNewIntent(Intent intent) {
Log.d(TAG, "\\\\\\new intent: "
+" the rowId is "+getIntent().getLongExtra(NoteColumns.ID, -1));
super.onNewIntent(intent);
}
【问题讨论】:
-
事实上,在上面的代码中,EditNote.onNewIntent 从未被调用过。如果我这样说:intent.setData(Uri.withAppendedPath(Uri.parse("ABCD" + "://widget/id/"), String.valueOf(appWidgetId))); onNewIntent 被调用,但我每次都会得到相同的行 ID(即,每次都重新传递第一个传入的行 ID)。希望我在这里遗漏了一些明显的东西!
标签: android android-activity task android-appwidget