首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在避免linter报告BroadcastReceiver后,UnsafeProtectedBroadcastReceiver将无法在android 9中工作

在避免linter报告BroadcastReceiver后,UnsafeProtectedBroadcastReceiver将无法在android 9中工作
EN

Stack Overflow用户
提问于 2019-03-27 15:15:34
回答 1查看 240关注 0票数 0

我使用scheduledAlarm来触发启动BroadcastReceiverBroadcastReceiver,它工作得很好,但是当我检查代码时,我得到了UnsafeProtectedBroadcastReceiver,我在onReceive方法中添加了条件签入来填充操作,但是JobIntentService没有工作。但如果我换了条件它就能正常工作了。请注意,我正在使用Android9。任何帮助都可以提前感谢BroadCastReceiver

代码语言:javascript
复制
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
    }
}

主文件

代码语言:javascript
复制
  <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

代码语言:javascript
复制
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)
        }
    }

报警

代码语言:javascript
复制
  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)
        }
EN

回答 1

Stack Overflow用户

发布于 2019-04-02 14:08:56

当您将检查添加到onReceive()中时,由AlarmManager触发的广播Intent将被忽略。这是因为您检查了Intent中的操作,而没有在通过AlarmManager发送的Intent中设置操作。

要解决这个问题,只需添加以下操作:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55380672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档