2017-10-19 12 views
0

ダウンロードの進行状況を表示する通知を作成したい(これは今のところ嘲笑されている)。ユーザーはダウンロードをキャンセルできる。通知ビルダーを使用して、「ダウンロードの取り消し」アクションを追加します。アクションは表示されますが、クリックするとPendingIntentは送信されません。私はcontentIntentを設定してPendingIntentが動作していることを確認しました。放送受信機は、コンテンツクリックのメッセージを得ることができるが、アクションクリックのメッセージを得ることはできない。通知アクションが実行されないPendingIntent

enter image description here

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

答えて

0

私は自分自身で答えを見つけました。まず、すべてが正しく構成されていました。私が変更しなければならなかったのは、通知の更新間隔だけでした。間隔を約2000msに設定した後、[中止]ボタンを選択すると、クリックイベントが発生しました。

Thread({ 
    for (i in 0..100 step 20) { 
     notificationBuilder.setProgress(100, i, false) 
     notificationManager?.notify(NOT_ID_PROGRESS, notificationBuilder.build()) 
     Thread.sleep(2000L) 
    } 
    notificationBuilder.setProgress(0, 0, false) 
    notificationBuilder.setContentText("Download completed") 
    notificationManager?.notify(NOT_ID_COMPLETE, notificationBuilder.build()) 
    onFinish() 
}).start() 
関連する問題