我用这个代码来建立通知。它有标题,文字,图标,
诉讼
作为
广播消息
. 我希望这足以回答你的问题)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notChannel = NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT)
notManager.createNotificationChannel(notChannel)
}
val builder = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
val contentIntent = Intent(NOT_ACTION)
contentIntent.putExtra(EXTRA_NOT_ID, notificationId)
val contentAction = PendingIntent.getBroadcast(this@MainActivity, NOT_REQ_CODE, contentIntent, PendingIntent.FLAG_UPDATE_CURRENT)
builder.setContentTitle("Notification $notificationId")
.setContentText("Awesome text for $notificationId notification")
.setContentIntent(contentAction)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setAutoCancel(true)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setCategory(NotificationCompat.CATEGORY_MESSAGE)
.setDefaults(NotificationCompat.DEFAULT_ALL)
NotificationManagerCompat
.from(this@MainActivity)
.notify(notificationId++, builder.build())
一。你能触发通知动作吗?
是的,你可以。
你可以得到
Notification
从
StatusBarNotification
,然后获取
PendingIntent
s表示动作并使用它们。
例如,我想触发
诉讼
通知
override fun onNotificationPosted(sbn: StatusBarNotification) {
super.onNotificationPosted(sbn)
Log.d(TAG, "Gotcha notification from ${sbn.packageName}")
if (sbn.packageName == TARGET_PACKAGE) {
val contentIntent = sbn.notification.contentIntent
contentIntent.send()
}
}
此代码将触发发送
广播消息
. 但它会忽略
.setAutoCancel(true)
通知,所以您需要像这样手动处理它
if (sbn.packageName == TARGET_PACKAGE) {
val contentIntent = sbn.notification.contentIntent
contentIntent.send()
if (sbn.notification.flags and Notification.FLAG_AUTO_CANCEL != 0) {
cancelNotification(sbn.key)
}
}
2。怎么
清理器
取消正在进行的通知?
我首先想到的是
NotificationListenerService.snoozeNotification
这样地
if (sbn.packageName == TARGET_PACKAGE) {
snoozeNotification(sbn.key, Long.MAX_VALUE - System.currentTimeMillis())
}
我百分之九十九的确信,NCLeaner使用这个代码。因为它不支持pre-O设备的这个特性。
注意。你不能就这样
Long.MAX_VALUE
,通知将暂停几秒钟,然后再次出现。在像素28.1上测试。
三。你能修改现有的通知吗?
不,你不能。
只有通知所有者应用程序可以修改它。
附笔。
我也试图通过隐藏的方法和领域来克服反射的局限性
NotificationManager
和
NotificationListenerService
. 所有尝试的结果是:
引起原因:java.lang.SecurityException:调用uid 10210给出了uid 10211拥有的包com.ns.notificationsender
所以你的应用程序必须是系统一,或者也许根可以帮助成功。但我没有这种装置。