单击本地通知时无法打开现有的正在运行的活动
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【讨论】:
以上是关于单击本地通知时无法打开现有的正在运行的活动的主要内容,如果未能解决你的问题,请参考以下文章