【问题标题】:Opening browser link with ACTION_VIEW not working for notification outside app使用 ACTION_VIEW 打开浏览器链接不适用于应用程序外的通知
【发布时间】:2022-02-04 15:32:03
【问题描述】:

不久前我有一段运行良好的代码:

Intent browserAction = new Intent(Intent.ACTION_VIEW, uri);
browserAction.setData(uri);
browserAction.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(browserAction);

它在 BroadcastReceiveronReceive 中,用于从通知操作(也可以执行其他操作的 PendingIntent)触发浏览器。出于某种原因(可能是android更新),它现在仅在我在前台使用我的应用程序阅读通知时才有效。如果我在我的应用之外并单击通知操作,则不会调用浏览器。

关于可能发生的事情以及我应该检查什么的任何想法?

编辑:如果我直接从 Intent.ACTION_VIEW 执行 PendingIntent(而不是在 BroadcastReceiver 中使用 Intent.ACTION_VIEW),即使在应用程序之外,该操作也会很好地触发。但我不能依赖这个,因为我的 BroadcastReceiver 在调用浏览器后做了其他事情。

【问题讨论】:

  • 我认为你必须使用挂起的意图而不是意图

标签: java android android-intent android-notifications


【解决方案1】:

您需要使用pending intent 而不是简单的意图。因为通知通常只会在您的应用处于后台时触发pending intents。 所以,请试试这个代码。

Intent browserAction = new Intent(Intent.ACTION_VIEW, uri);
browserAction.setData(uri);
browserAction.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

// Create the PendingIntent
PendingIntent notifyPendingIntent = PendingIntent.getActivity(
        this, 0, browserAction, PendingIntent.FLAG_UPDATE_CURRENT
);

更新

这个答案对你很有用。请参考这里。

refer this

【讨论】:

  • 部分解决了!实际上,我已经在使用 PendingIntent 进行通知,但它是与另一个在其中使用 ACTION_VIEW 的 Action 一起使用的。你给了我简化它的想法。正如您所写,我没有使用调用 ACTION_VIEW 的自定义操作,而是直接在 Pending Intent 中使用它。现在浏览器再次在应用程序外部打开!但是我遇到了一个新问题:我在自定义操作中所做的一件事是调用 NotificationManagerCompat.cancelAll 以在操作后关闭通知。没有它,当我点击操作时通知不会被删除。
  • 执行任何操作后,您必须使用 notification_id 取消通知
  • 在 pending_intent 中,我们默认为通知 id 传递 0。您必须为此使用自己的通知 ID。在执行某些操作后关闭通知
  • 但是看看你建议的代码,你会在哪里取消通知?当我使用广播接收器时,我可以做到这一点。但是直接将 PendingIntent 与 Intent.ACTION_VIEW 一起使用,我无法控制操作的执行。
猜你喜欢
  • 2019-04-05
  • 1970-01-01
  • 2014-09-02
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 2020-01-30
相关资源
最近更新 更多