即使使用 setExactAndAllowWhileIdle 也不会触发 AlarmManager

问题描述

我在 Android 10 的 AlarmManager 中遇到了问题。

低于要求,

  1. 我需要在某个事件发生后设置闹钟
  2. 这也应该在打盹模式下工作

这是我设置的闹钟代码

public void setAlarm(Context context,int duration) {
        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(context,StatusAlarm.class);
        i.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
        i.putExtra("triggerAtMillis",System.currentTimeMillis() + (1000 * 60 * geo_fencing_duration));
        i.setAction("android.com.SAMPLE_ACTION");
        PendingIntent pi = PendingIntent.getBroadcast(context,REQUEST_CODE,i,PendingIntent.FLAG_UPDATE_CURRENT);
        am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + (1000 * 60 * duration),pi); // 5 minutes
    }

这是我的 BrodcastReceiver

@Override
public void onReceive(Context context,Intent intent) 
{

    Log.d(TAG,"Action: " + intent.getAction());

    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"app:name");
    wl.acquire();
    //Do cloud call - Rest API
    wl.release();
}

我发现没有触发警报。我无法理解这个问题。

我检查了警报转储系统。

以下是设置闹钟后和= 1618287337846时的输出

RTC_WAKEUP #0: Alarm{7871afc type 0 when 1618287337846 com.xxx.myapp}
      tag=*walarm*:android.com.SAMPLE_ACTION
      operation=PendingIntent{9a77585: PendingIntentRecord{fad993b com.xxx.myapp broadcastIntent}}

当实际触发时间已过且未触发警报时,我再次检查了 dumpsys 当 = 9223372036854775807 这很奇怪

ELAPSED_WAKEUP #1: Alarm{2b409da type 2 when 9223372036854775807 com.xxx.myapp}
      tag=*walarm*:com.xxx.myapp/org.altbeacon.beacon.startup.StartupBroadcastReceiver
      operation=PendingIntent{a44ce0b: PendingIntentRecord{2d089a2 com.xxx.myapp broadcastIntent}}

请帮我理解这个问题。我仍然对这种意想不到的行为感到困惑。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)