单击本地通知时无法打开现有的正在运行的活动

Posted

技术标签:

【中文标题】单击本地通知时无法打开现有的正在运行的活动【英文标题】:Unable to open existing which is running activity when click on local notification 【发布时间】:2020-01-22 14:51:49 【问题描述】:

我正在为我的应用实施本地通知。 问题:当我点击通知时,它会从一开始就打开应用程序。但我想从应用程序在后台输入的同一屏幕打开应用程序。

我已经尝试过的解决方案:

Intent intent = new Intent(this, SplashScreen.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
        PendingIntent contentIntent = PendingIntent.getActivity(this, new Random().nextInt(), intent, 0);

我尝试了许多标志设置,但都没有工作 和PendingIntent.FLAG_ONE_SHOT 也不起作用。

我也通过此链接尝试过 How to open already opened activity instead of creating new one? 但这对我不起作用。

平台:android 9(馅饼), 最低 API:24。

请帮忙。

【问题讨论】:

【参考方案1】:

您尝试做的事情可以通过多种方式实现。

根据经验,解决此问题的最简单方法是在开始活动显示之前完成它。如果您的启动活动仅在应用启动时出现,您可以这样做:

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    if (!isTaskRoot()) 
        finish();
        return;
    

    setContentView(R.layout.activity_splash);

如果不是您的情况,您可以为“幻像活动”创建一个 Intent。如果应用程序正在运行,幻象活动可能会关闭,如果应用程序未运行,它可能会重定向到启动活动。

【讨论】:

我不能这样做,因为我需要传递一些不好的参数......【参考方案2】:

如果您只想在不启动特定活动的情况下恢复您的应用,请不要指定PendingIntent。在这种情况下,当应用程序关闭时,Android 将在用户点击时从头开始启动您的应用程序。但是,如果您的应用仍在运行,它将恢复运行。 例如,您可以使用以下

 NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!");


    // Gets an instance of the NotificationManager service//

    NotificationManager mNotificationManager =

        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    mNotificationManager.notify(1, mBuilder.build());

【讨论】:

不,如果你不能 setContentIntent() 它就不起作用,它只是一个不可点击的通知【参考方案3】:

另一种更复杂的方式是使用深度链接,如果你在用户点击通知后会在应用中导航,特别推荐:

从深度链接开始的不错的中篇文章:https://medium.com/@muratcanbur/intro-to-deep-linking-on-android-1b9fe9e38abd 有关深层链接的 Android 文档:https://developer.android.com/training/app-links/deep-linking.html

您还可以使用广播通过应用传递信息:

https://developer.android.com/guide/components/broadcasts https://android.jlelse.eu/local-broadcast-less-overhead-and-secure-in-android-cfa343bb05be

【讨论】:

以上是关于单击本地通知时无法打开现有的正在运行的活动的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中单击通知时打开特定活动

单击推送通知时对特定活动的意图。

单击推送通知时如何打开活动?

单击服务生成的通知时,即使已经打开,主 Activity 也会再次打开

如果应用程序在前台,单击本地通知打开特定的视图控制器?

在应用关闭时单击 Firebase 通知后打开特定的活动/片段