我使用scheduledAlarm来触发启动BroadcastReceiver的BroadcastReceiver,它工作得很好,但是当我检查代码时,我得到了UnsafeProtectedBroadcastReceiver,我在onReceive方法中添加了条件签入来填充操作,但是JobIntentService没有工作。但如果我换了条件它就能正常工作了。请注意,我正在使用Android9。任何帮助都可以提前感谢BroadCastReceiver。
class BootBroadCastReciever : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
val i = Intent(context, IncomingRequestServices::class.java)
//Start the service
context?.let {
IncomingRequestServices.enqueueWork(it,i)
}
}
}
companion object {
const val REQUEST_CODE = 12345
}
}主文件
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name=".BoardcastReciever.BootBroadCastReciever" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<service
android:name=".Services.IncomingRequestServices"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE"/>JobIntentService
class IncomingRequestServices : JobIntentService() {
var CHANNEL_ID = "ChannelID"
override fun onHandleWork(intent: Intent) {
//I check for news from server and send notification to user
}
companion object
{
const val JOB_ID = 101
const val NOTIF_ID = 82
fun enqueueWork(context: Context, work: Intent)
{
JobIntentService.enqueueWork(context,IncomingRequestServices::class.java, JOB_ID, work)
}
}报警
private fun scheduleAlarm() {
// Construct an intent that will execute the AlarmReceiver
val intent = Intent(applicationContext, BootBroadCastReciever::class.java)
// Create a PendingIntent to be triggered when the alarm goes off
alarmPendingIntent = PendingIntent.getBroadcast(this, BootBroadCastReciever.REQUEST_CODE,
intent, PendingIntent.FLAG_UPDATE_CURRENT)
// Setup periodic alarm every 5 seconds
val firstMillis = System.currentTimeMillis() // first run of alarm is immediate
val intervalMillis = 60000 // as of API 19, alarm manager will be forced up to 60000 to save battery
val alarm = this.getSystemService(Context.ALARM_SERVICE) as AlarmManager
// See https://developer.android.com/training/scheduling/alarms.html
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstMillis, intervalMi
llis.toLong(), alarmPendingIntent)
}发布于 2019-04-02 14:08:56
当您将检查添加到onReceive()中时,由AlarmManager触发的广播Intent将被忽略。这是因为您检查了Intent中的操作,而没有在通过AlarmManager发送的Intent中设置操作。
要解决这个问题,只需添加以下操作:
val intent = Intent(applicationContext, BootBroadCastReciever::class.java)
intent.setAction(Intent.ACTION_BOOT_COMPLETED)
// Create a PendingIntent to be triggered when the alarm goes off
alarmPendingIntent = PendingIntent.getBroadcast(this, BootBroadCastReciever.REQUEST_CODE,
intent, PendingIntent.FLAG_UPDATE_CURRENT)https://stackoverflow.com/questions/55380672
复制相似问题