如何解决如何使用pendingIntent Kotlin从Activity传递到BroadcastReceiver
嗨,我正在尝试使用WeatherNotification活动中的值显示来自Weatherbroadcater broadcastReceiver的温度值和天气描述通知。但是,由于在broadcastReceiver上显示为空,因此我无法检索这些值。检查我该怎么做,并先谢谢
WeatherNotification.kt
private fun setIntent() {
val intent = Intent(this,Weatherbroadcaster::class.java)
Log.d("broadcast","sending to broadcast Temp: ${weatherResult.temp},Desc: ${weatherResult.weatherDescription}")
intent.putExtra("Temp",weatherResult.temp.toString())
intent.putExtra("WeatherDes",weatherResult.weatherDescription.toString())
val pendingIntent: PendingIntent = PendingIntent.getbroadcast(context,intent,PendingIntent.FLAG_UPDATE_CURRENT)
alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val timeStart = System.currentTimeMillis()
val interval = 1000
alarmManager.setRepeating(
AlarmManager.RTC_WAKEUP,timeStart,interval.toLong(),pendingIntent
)
}
Weatherbroadcaster.kt
override fun onReceive(context: Context?,intent: Intent?) {
val intent = Intent(context,WeatherNotification::class.java)
val temp: String? = intent.getStringExtra("Temp")
val desc: String? = intent.getStringExtra("WeatherDes")
Log.d("broadcast","sending to broadcast Temp: $temp,Desc: $desc")
val pendingIntent: PendingIntent = PendingIntent.getActivity(context,0)
var bitmap = BitmapFactory.decodeResource(context?.resources,R.drawable.pressure)
var bitmapSun =
BitmapFactory.decodeResource(context?.resources,R.drawable.sunrise)
val builder = NotificationCompat.Builder(context!!,CHANNEL_ID)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle(temp)
.setContentText(desc)
.setLargeIcon(bitmapSun)
.setStyle(NotificationCompat.BigPictureStyle().bigPicture(bitmap))
.setContentIntent(pendingIntent)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
with(notificationmanagerCompat.from(context)) {
notify(notificationId,builder.build())
}
}
LogCat
2020-10-08 16:56:13.774 6462-18591/com.sgtech.ict3104.racecar D/broadcast: sending to broadcast Temp: 30.97°C,Desc: light rain
2020-10-08 16:56:33.227 6462-6462/com.sgtech.ict3104.racecar D/broadcast: sending to broadcast Temp: null,Desc: null
解决方法
温度键上有错字,您正在初始化接收器上的新意图
override fun onReceive(context: Context?,intent: Intent?) {
val intent = Intent(context,WeatherNotification::class.java)
//...
}
val intent
是您要从方法签名上的Intent
参数创建的新context
。您需要检查的是intent
参数。
override fun onReceive(context: Context?,intent: Intent?) {
//the intent is now the same as in the argument,the same received
intent ?: return
val temp: String? = intent.getStringExtra("temp")
val desc: String? = intent.getStringExtra("WeatherDes")
Log.d("Broadcast","sending to broadcast Temp: $temp,Desc: $desc")
//...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。