我有持续通知的服务。在应用程序本身,我有两个活动 - HomeActivity
和SettingsActivity
。
目前我所拥有的是 - >点击通知时:
如果该应用已关闭 - >打开HomeActivity
。
如果当前显示的活动为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();
Manifest:我添加了`android: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
的新实例。
我想要的是在任一活动中打开应用并点击通知时 - &gt;显示当前活动,如果应用已关闭并点击通知,请打开HomeActivity
的新实例。
答案 0 :(得分:3)
当我在SettingsActivity中并点击通知时,它会打开HomeActivity的新实例。
因为这是singleTop
的用途:
但是,如果目标任务已经有一个现有的实例 在其堆栈顶部的活动,该实例将收到新的 intent(在onNewIntent()调用中);未创建新实例。在 其他情况 - 例如,如果现有的实例 “singleTop”活动在目标任务中,但不在顶部 堆栈,或者它是否位于堆栈的顶部,但不在目标中 task - 将创建一个新实例并将其推送到堆栈中。
这是你的情况,因为你拥有的是SettingsActivity
。
我想要的是在任一活动中打开应用并点击通知时 - &gt;显示当前活动,如果已关闭应用并单击通知,请打开HomeActivity的新实例
然后,您的通知应该将意图发送到第3个活动(w / o ui),然后进一步重定向finish()
。根据您的targetSdk的不同,您可能需要使用ActivityLifecycleCallbacks来确定您的应用最前面的时间。