Android Kotlin广播接收器注册异常?定时器服务广播无法接收
Android秒表应用广播接收器无法接收消息问题
问题详情
我用Kotlin开发一款带秒表功能的Android应用,其中TimerService类的定时任务可每秒正确执行(日志正常输出),代码如下:
private inner class MyTask(private var time: Double) : TimerTask() { override fun run(){ Log.d("SERVICE", time.toString()) val intent = Intent(TIMER_UPADATED) time++ intent.putExtra(TIME_EXTRA, time) sendBroadcast(intent) } }
但对应的广播接收器无法接收任何消息(无日志输出),初始注册代码如下:
registerReceiver( timeReceiver, IntentFilter(TimerService.TIMER_UPADATED) ) private val timeReceiver: BroadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { time = intent.getDoubleExtra(TimerService.TIME_EXTRA, 0.0) Log.d("RECEIVER", time.toString()) } }
我判断问题出在接收器注册环节。教程中的上述写法本应生效,但该registerReceiver方法现已被弃用。我尝试了官方推荐的新版本写法,仍然无法接收广播:
registerReceiver( requireContext(), updateTime, IntentFilter(TimerService.TIMER_UPADATED), ContextCompat.RECEIVER_NOT_EXPORTED )
项目SDK配置
项目build.gradle中的SDK配置如下:
android { namespace = "com.myapp.myapp" compileSdk = 34 defaultConfig { applicationId = "com.myapp.myapp" minSdk = 33 targetSdk = 34 }
内容的提问来源于stack exchange,提问作者Elis Hazelton
相关产品推荐
相关产品推荐

