不久前我有一段运行良好的代码:
Intent browserAction = new Intent(Intent.ACTION_VIEW, uri);
browserAction.setData(uri);
browserAction.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(browserAction);
它位于 BroadcastReceiver 的 onReceive 内部,用于通过通知操作(也可以执行其他操作的 PendingIntent)触发浏览器。由于某种原因(可能是android更新),它现在仅当我在前台使用我的应用程序读取通知时才有效。如果我在应用程序外部并单击通知操作,则不会调用浏览器。
对可能发生的情况以及我应该检查什么有什么想法吗?
编辑:如果我直接从 Intent.ACTION_VIEW 执行 PendingIntent (而不是在 BroadcastReceiver 内使用 Intent.ACTION_VIEW),即使在应用程序外部,该操作也会很好地触发。但我不能依赖这个,因为我的 BroadcastReceiver 在调用浏览器后做了其他事情。
您需要使用
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
);
这个答案对你有用。请参考这个。
请遵循此代码:
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())