PX *_*per 154 notifications android android-activity
我有一个带有通知的应用程序,如果我点击它们就会打开某个活动.我想要的是,如果我点击通知并且活动已经打开,它就不会再次启动,而是会被带到前面.
我以为我可以用国旗做FLAG_ACTIVITY_BROUGHT_TO_FRONT或FLAG_ACTIVITY_REORDER_TO_FRONT,但它一直再次打开它,所以我有两次活动.
这是我的代码:
event_notification = new Notification(R.drawable.icon,
mContext.getString(R.string.event_notif_message), System.currentTimeMillis());
Intent notificationIntent = new Intent(mContext, EventListActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
sendNotification(event_notification, notificationIntent, mContext.getString(R.string.event_notif_title),
body, Utils.PA_NOTIFICATIONS_ID);
Run Code Online (Sandbox Code Playgroud)
我可以使用标志管理它,还是应该在SharedPreferences中存储变量以检查它是否已打开?
谢谢!
Dev*_*red 278
您需要设置您正在开始的launchMode属性.这将导致传入的Intent传递到现有实例,而不是在已经位于任务堆栈顶部时启动新实例.ActivitysingleTopActivity
这是通过添加android:launchMode="singleTop"到<activity>元素在清单中完成的.要访问最新的Intent(如果您对可能已经传入的任何数据感兴趣),请覆盖onNewIntent()您的Activity.
qui*_*int 34
请尝试将标志设置为Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP.
从FLAG_ACTIVITY_CLEAR_TOP(强调我的)的文档:
如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在开启) top)旧活动作为新的意图.
例如,考虑一个由活动组成的任务:A,B,C,D.如果D调用带有解析为活动B组件的Intent的startActivity(),则C和D将完成,B接收给定的Intent ,导致堆栈现在是:A,B.
上面示例中当前运行的活动B实例将在其onNewIntent()方法中接收您从此处开始的新意图,或者本身已完成并使用新意图重新启动.如果它已将其启动模式声明为"多个"(默认值)并且您没有在同一意图中设置FLAG_ACTIVITY_SINGLE_TOP,那么它将被完成并重新创建; 对于所有其他启动模式或如果设置了FLAG_ACTIVITY_SINGLE_TOP,则此Intent将被传递到当前实例的onNewIntent().
小智 5
Notification.Builder mBuilder =
new Notification.Builder(this)
.setSmallIcon(R.drawable.cmplayer)
.setContentTitle("CoderoMusicPlayer")
.setContentText("PLayer0!");
Intent resultIntent = new Intent(this,
AndroidBuildingMusicPlayerActivity.class);
resultIntent.setAction(Intent.ACTION_MAIN);
resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
resultIntent, 0);
mBuilder.setContentIntent(pendingIntent);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotificationManager.notify(1, mBuilder.build());
Run Code Online (Sandbox Code Playgroud)
只需复制代码并将其粘贴到您的主启动器活动中即可。
| 归档时间: |
|
| 查看次数: |
70744 次 |
| 最近记录: |