3

我有一个正在进行通知的服务。在应用程序本身,我有两个活动 - HomeActivitySettingsActivityandroid - 通知点击 - 如果应用程序关闭打开活动,如果应用程序打开带来显示当前活动

目前我有的是 - >点击通知:

  1. 如果应用程序被关闭 - >打开HomeActivity

  2. 如果当前显示的活动是HomeActivity,请将其置于前面而不创建新的活动。

代码:

resultIntent = new Intent(context, HomeActivity.class); 
resultPendingIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

Notification notification = mBuilder 
       .setSmallIcon(notificationData.getImageSrc()) // the status icon 
       .setTicker("HealthChecker") // the status text 
       .setWhen(System.currentTimeMillis()) // the time stamp 
       .setContentTitle("HealthChecker") // the label of the entry 
       .setContentText(notificationData.getText()) // the contents of the entry 
       .setOngoing(true).setContentIntent(resultPendingIntent) 
       .build(); 

清单:我接着说:机器人:launchMode = “singleTop”:

<activity 
      android:name=".ui.HomeActivity" 
      android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
      android:label="@string/app_name" 
      android:launchMode="singleTop" 
      android:theme="@style/AppTheme.NoActionBar"></activity> 

我的问题是:

当我在SettingsActivity,然后单击通知,它会打开HomeActivity的新实例。

我希望在应用程序在任何活动被打开,点击通知 - >显示当前活动,并且如果应用程序被关闭和被点击的通知,的HomeActivity开放的新实例。

+0

我想你应该阅读这个https://developer.android.com/training/notify-user/navigation.html – Raghunandan

+1

我把它作为重复关闭。请参阅http://stackoverflow.com/questions/5502427/resume-application-and-stack-from-notification,因为它涵盖了这个问题。 –

回答

1

当我在SettingsActivity中并单击通知时,它会打开一个新的HomeActivity实例。

,因为这是singleTop是:

然而,如果目标任务已在其堆栈顶部的 活动的现有实例,该实例将获得新的 意图(在onNewIntent()调用中);一个新的实例不会被创建。在 其他情况下 - 例如,如果 “singleTop”活动的现有实例位于目标任务中,但不在 堆栈顶部,或者位于堆栈顶部但不在目标 任务 - 将创建一个新实例并将其推入堆栈。

这是你的情况,因为你在顶部是SettingsActivity。 >显示当前活动,并且如果应用程序被关闭和被点击的通知,开启新的实例HomeActivity

的然后 -

我想,当应用程序在任一活动打开,通知被点击是您的通知应该发送意向到第三个活动(w/o ui),然后将进一步重定向并且finish()。根据什么是您的targetSdk,您可能需要使用ActivityLifecycleCallbacks来确定您的应用何时位于最前面或最前面。

+1

虽然这个答案会起作用,但这是很长的路要走。你最终会写很多不必要的代码,并使你的应用程序变得复杂。 OP的问题非常普遍,并且有一个非常简单的方法来处理它。请参阅http://stackoverflow.com/questions/5502427/resume-application-and-stack-from-notification –

+0

@DavidWasser这应该工作,如果是这样,这是比我的更好的解决方案,但如果你按照下面的评论接受回答那里听起来不像一个坚实的解决方案。 –

+0

是的,它确实有效。每时每刻。你可以放心地忽略来自那些认为没有的人的一些评论。我认为他们可能有其他问题导致他们的问题。 –

相关问题