android - 通知点击 - 如果应用已关闭打开活动,如果应用已打开,则显示当前活动

时间:2016-05-31 15:31:46

标签: android android-activity notifications android-pendingintent

我有持续通知的服务。在应用程序本身,我有两个活动 - HomeActivitySettingsActivity

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

  1. 如果该应用已关闭 - >打开HomeActivity

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

  3. 代码:

    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的新实例。

1 个答案:

答案 0 :(得分:3)

  

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

因为这是singleTop的用途:

  

但是,如果目标任务已经有一个现有的实例   在其堆栈顶部的活动,该实例将收到新的   intent(在onNewIntent()调用中);未创建新实例。在   其他情况 - 例如,如果现有的实例   “singleTop”活动在目标任务中,但不在顶部   堆栈,或者它是否位于堆栈的顶部,但不在目标中   task - 将创建一个新实例并将其推送到堆栈中。

这是你的情况,因为你拥有的是SettingsActivity

  

我想要的是在任一活动中打开应用并点击通知时 - &gt;显示当前活动,如果已关闭应用并单击通知,请打开HomeActivity的新实例

然后,您的通知应该将意图发送到第3个活动(w / o ui),然后进一步重定向finish()。根据您的targetSdk的不同,您可能需要使用ActivityLifecycleCallbacks来确定您的应用最前面的时间。