虽然在 Manifest 中定义接收者是有效的,但我在动态定义方面遇到了困难。我的应用程序包含用于创建广播的代码
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val intent = Intent(this, AlarmReceiver::class.java)
intent.setAction("com.example.PetesTimerOne.Broadcast")
val pendingIntent = PendingIntent.getBroadcast(this, ALARM_REQUEST_CODE,
intent, PendingIntent.FLAG_UPDATE_CURRENT)
alarmManager.setExact(
AlarmManager.RTC_WAKEUP,
firstAlarm.timeInMillis,
pendingIntent
为了接收,我有一个 BoardcastReceiver 类
package com.example.PetesTimerOne
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.widget.Toast
import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.getSystemService
import android.annotation.TargetApi
class AlarmReceiver: BroadcastReceiver() {
companion object {
const val NOTIFICATION_ID = 100
const val NOTIFICATION_CHANNEL_ID = "1000"
}
override fun onReceive(context: Context, intent: Intent) {
Toast.makeText(context, "onReceive called", Toast.LENGTH_SHORT).show()
//createNotificationChannel(context)
//notifyNotification(context)
// println("onReceive called")
}
如果我通过
在清单中定义接收者 <receiver
android:name=".AlarmReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.PetesTimerOne.Broadcast"></action>
</intent-filter>
</receiver>
它工作正常。但是,当我在 MainActivity 中尝试动态定义时
private val alarmReceiver = AlarmReceiver()
在 onCreate()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// alarm receiver
val iF = IntentFilter(cBroadcastName)
registerReceiver(alarmReceiver, iF)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
val navController = findNavController(R.id.nav_host_fragment_content_main)
appBarConfiguration = AppBarConfiguration(navController.graph)
setupActionBarWithNavController(navController, appBarConfiguration)
}
它不起作用,我不明白为什么。我检查了很多教程,但找不到我错过的东西。
我挣扎了几个小时。终于让它工作了。
intent中不要设置class,只设置action,所以这里:
val intent = Intent(this,AlarmReceiver::class.java)
进入
val intent = Intent("com.example.PetesTimerOne.Broadcast")