我有一个使用通知管理器的通知生成器,我使用startForegroud()方法实现了一个前台服务。然而,我对如何使用广播接收器使用stopForeground(true)和stopSelf()停止服务感到非常困惑。这是我目前掌握的情况
在我的MyForegroundService类中,我有以下内容。
class MyForegroundServices : Service() {
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Thread {
while (true) {
Log.e("Service", "Service is running...")
try {
Thread.sleep(2000)
} catch (e: InterruptedException) {
e.printStackTrace()
}
}
}.start()
val CHANNELID = "Foreground Service ID"
val channel = NotificationChannel(
CHANNELID,
CHANNELID,
NotificationManager.IMPORTANCE_LOW
)
val foregroundIntent = Intent(this, NotificationReceiver::class.java).apply {
action = "STOP_FOREGROUND_SERVICE"
putExtra(EXTRA_NOTIFICATION_ID, 0)
}
val foregroundPendingIntent: PendingIntent =
PendingIntent.getBroadcast(this, 0, foregroundIntent, 0)
getSystemService(NotificationManager::class.java).createNotificationChannel(channel)
val notification = Notification.Builder(this, CHANNELID)
.setContentText("Service is running")
.setContentTitle("Service enabled")
.setSmallIcon(R.drawable.ic_launcher_background)
.addAction(R.drawable.ic_launcher_background, "Stop", foregroundPendingIntent)
//Any ID will do at the moment
startForeground(1001, notification.build())
return super.onStartCommand(intent, flags, startId)
}
override fun onBind(p0: Intent?): IBinder? {
TODO("Not yet implemented")
}
}
现在我不知道如何正确地实现pendingIntent,我也不知道在使用Broadcast receivers的receiver类中放置什么
class NotificationReceiver : BroadcastReceiver() {
override fun onReceive(p0: Context?, p1: Intent?) {
TODO("Not yet implemented")
}
}
期待并提前感谢您的帮助。
1条答案
按热度按时间rsl1atfo1#
看起来你的
PendingIntent
很好。如果你想让你的
BroadcastReceiver
停止Service
,对onReceive()
使用类似这样的方法:如果您还想使用这个
BroadcastReceiver
来做其他事情,您可以查询传入onReceive()
的Intent
参数,并使用ACTION或“extras”来执行您想要的任何其他功能。