从接收器设置时,setAlarmClock不起作用

时间:2018-05-09 06:36:15

标签: android broadcastreceiver alarmmanager

在我的代码中,我有一个广播接收器

     <receiver
        android:name=".alarm.AlarmReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.TIME_SET" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.BalDroid.YekNegah.alarm.dailyAction" 
        />
        </intent-filter>
    </receiver>     

我在onReceive方法中在此接收器中安排闹钟

  PendingIntent pi = PendingIntent.getBroadcast(context, AlarmRow.getId(mycursor), i, PendingIntent.FLAG_UPDATE_CURRENT);
                if (Build.VERSION.SDK_INT >= 21) {

                    AlarmManager.AlarmClockInfo alarmInfo = new AlarmManager.AlarmClockInfo(
                            mycal.getTimeInMillis(),pi);
                   mgr.setAlarmClock(alarmInfo,pi);

                    // Create a Pending intent to show Alarm Details
                } 

虽然接收器运行但警报不会触发mgr.setAlarmClock。但是当我使用时  mgr.setExactAndAllowWhileIdle警报触发器

(由于setAlarmClock准确度,我必须在我的代码中使用setAlarmClock

当我从MainActivity安排mgr.setAlarmClock时(手动启动应用程序时),它可以工作 我找不到解决方案!! (我不知道接收者为什么不工作。)

1 个答案:

答案 0 :(得分:0)

我的应用在setAlarmClock上也调用了AlarmManager,但是该事件并未触发。对我来说,原因是制造商对后台进程的默认限制(我的手机是小米)。

转到设置->您的应用程序,然后找到背景限制选项。关闭限制,setAlarmClock必须正常工作。

结论是,结果取决于制造商的默认设置。