Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 忽略标记\u活动\u重新排序\u到\u前端_Android_Android Intent_Android Pendingintent - Fatal编程技术网

Android 忽略标记\u活动\u重新排序\u到\u前端

Android 忽略标记\u活动\u重新排序\u到\u前端,android,android-intent,android-pendingintent,Android,Android Intent,Android Pendingintent,我有一个带有项目列表的片段活动,当应用程序在后台时,可以推送到该项目列表 发生这种情况时,我希望创建一个状态栏通知并提醒用户更新。当用户单击通知时,活动应重新排序到前面并显示在屏幕上,同时在列表底部显示新项目 因此,我编写了一个通知管理器,在用户设备上显示: private static void createNotification(String title, String text, String largeIcon, String itemdId, Context mCOntext

我有一个带有项目列表的片段活动,当应用程序在后台时,可以推送到该项目列表

发生这种情况时,我希望创建一个状态栏通知并提醒用户更新。
当用户单击通知时,活动应重新排序到前面并显示在屏幕上,同时在列表底部显示新项目

因此,我编写了一个通知管理器,在用户设备上显示:

private static void createNotification(String title, String text,
    String largeIcon, String itemdId, Context mCOntext) {

Bitmap ic = BitmapFactory.decodeResource(mContext.getResources(),
    R.drawable.ic_launcher);
Intent intent = new Intent(mContext, MyFragmentActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.putExtra(MyFragmentActivity.SELECTED_ITEM_LIST_ID, DatabaseHelper
    .getItemListById(listId).getId());
PendingIntent pIntent = PendingIntent.getActivity(mContext, 0, intent,
    0);

Notification noti = new NotificationCompat.Builder(mContext)
    .setContentTitle(title).setContentText(text)
    .setSmallIcon(R.drawable.ic_launcher).setContentIntent(pIntent)
    .setAutoCancel(true).setLargeIcon(ic).build();
noti.defaults |= Notification.DEFAULT_LIGHTS;
noti.defaults |= Notification.DEFAULT_VIBRATE;
noti.sound = Uri.parse("android.resource://"
    + mContext.getPackageName() + "/" + R.raw.user_gets_message);

NotificationManager nm = (NotificationManager) mContext
    .getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(0, noti);
}
唯一的问题是,当我导航到fragment活动,然后转到我的主屏幕(应用程序背景)并获得推送时,它似乎忽略了我的标志。当我单击通知时,应用程序创建一个新活动(或片段),并显示新活动,而不是带有新数据的原始活动。(这意味着单击“上一步”按钮将从历史堆栈中打开相同的活动(或片段)

我重写了活动的
onNewIntent
和所有生命周期方法,我看到在单击back时,调用的方法是
MyFragmentActivity.onStart
MyFragmentActivity.onResume


关于我做错了什么有什么想法吗?

我假设问题是您将活动启动模式设置为singleTask,这会将标志添加到您的意图中,并导致忽略标志“活动重新排序到”前端


您需要将启动模式更改为single top。

标记为已接受的解决方案存在缺陷,除非有我正在关注而您没有关注的特殊场景。如果您有launchmode=“singleTop”,并且您有一个打开活动a的通知,并且您的应用程序正在查看活动B(应用程序要么最小化,要么最大化,即在后台或前台,这无关紧要)然后,即使设置了标志“活动”\u“重新排序”\u至“前台”标志,它仍将打开活动a的第二个副本

对此,我的解决方案是制作一个广播接收器,用于侦听通知触发的广播操作。因此基本上:

  • 通知会触发一个广播操作,其中包含要启动的活动的名称

  • 广播接收器在单击通知时捕捉到这一点,然后使用标志\u activity\u REORDER\u to\u FRONT标志创建启动该活动的意图

  • 活动被带到活动堆栈的顶部,没有重复项


  • 我同意你的看法,接受的答案不起作用(测试了几次),你的解决方案也很好(就像创建一个midlware活动来打开其他活动),但它仍然是一个糟糕的设计解决方案。