使用 ACTION_VIEW 打开浏览器链接不适用于应用程序外部的通知

问题描述 投票:0回答:2

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

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
2个回答
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
);

更新

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

参考这个


0
投票

请遵循此代码:

        var notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as
                NotificationManager
        var newNotifId = (1000000..2000000).random()// or you can change it to your uniquee id

        var builder:Notification.Builder
        var description="this is my notif description!"
        var title="my custom title"
        // checking if android version is greater than oreo(API 26) or not
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channelId = "thisismyapp"
            builder  = Notification.Builder(_context, channelId)
                .setContentTitle(title)
                .setContentText(description)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(_context.resources,
                    R.drawable.ic_launcher_background
                ))
        } else {

            builder = Notification.Builder(_context)
                .setContentTitle(title)
                .setContentText(desc)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(_context.resources, R.mipmap.ic_launcher))
        }

        val myuri = Uri.parse(notifLink)
        val browserAction = Intent(Intent.ACTION_VIEW,myuri )
        browserAction
            .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            .addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
        browserAction.setData(myuri);
        browserAction.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        val pendingIntent =
            PendingIntent.getActivity(
                _context,
                newNotifId,
                browserAction,
                PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_MUTABLE
            )
        builder.setContentIntent(pendingIntent);
        _notificationManager.notify(newNotifId, builder.build())
© www.soinside.com 2019 - 2024. All rights reserved.