0
ダウンロードの進行状況を表示する通知を作成したい(これは今のところ嘲笑されている)。ユーザーはダウンロードをキャンセルできる。通知ビルダーを使用して、「ダウンロードの取り消し」アクションを追加します。アクションは表示されますが、クリックするとPendingIntentは送信されません。私はcontentIntentを設定してPendingIntentが動作していることを確認しました。放送受信機は、コンテンツクリックのメッセージを得ることができるが、アクションクリックのメッセージを得ることはできない。通知アクションが実行されないPendingIntent
DownloadServiceの
val cancelIntent = Intent(applicationContext, NotificationBroadcastReceiver::class.java).apply {
action = "xxx.xxx.xxx.CANCEL_DOWNLOAD"
putExtra("notification_id", NOT_ID_PROGRESS)
}
val pendingIntent = PendingIntent.getBroadcast(applicationContext, 1, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT)
pendingIntent.send()
val notificationBuilder = NotificationCompat.Builder(applicationContext, "updates").apply {
setContentTitle("Title")
setContentText("Text")
setSmallIcon(R.drawable.ic_logo_full_black)
setOnlyAlertOnce(true)
setContentIntent(pendingIntent)
addAction(NotificationCompat.Action.Builder(R.drawable.ic_delete, "Cancel", pendingIntent).build())
}
startForeground(NOT_ID_PROGRESS, notificationBuilder.build())
Thread({
for (i in 0..100) {
notificationBuilder.setProgress(100, i, false)
notificationManager?.notify(NOT_ID_PROGRESS, notificationBuilder.build())
Thread.sleep(100L)
}
notificationBuilder.setProgress(0, 0, false)
notificationBuilder.setContentText("Download completed")
notificationManager?.notify(NOT_ID_COMPLETE, notificationBuilder.build())
onFinish()
}).start()
class NotificationBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val notificationId = intent?.getIntExtra("notification_id", 0) ?: 0
Log.d(TAG, "NotificationBroadcastReceiver: notificationId = $notificationId")
(context?.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager?)?.cancel(notificationId)
}
}
のAndroidManifest.xml
NotificationBroadcastReceiver