AlarmManager.setExactAndAllowWhileIdle(...)在Android O中丢失额外的内容

时间:2018-06-06 16:01:57

标签: android alarmmanager android-pendingintent android-8.0-oreo

如果应用处于打盹模式(最多30秒),我试图显示时间紧迫的通知,无法等待15分钟或更长时间。我的代码在Android M中运行良好,但在Android O中,我的额外代码为空。

    Intent notificationDataIntent = new Intent("com.action.crymyselftosleep");

    notificationDataIntent.putExtra(Config.RECEIVER_TEST_EXTRA_DATA, data));

    PendingIntent notificationIntent = PendingIntent.getBroadcast(context, 12345, notificationDataIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
         am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, notificationIntent);
    } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
         am.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, notificationIntent);
    } else {
         context.sendBroadcast(notificationDataIntent);
    }

在接收方:

public void onReceive(Context context, Intent intent) {
    SomeData data = intent.getParcelableExtra(Config.RECEIVER_TEST_EXTRA_DATA);
}

在运行Android M的设备上,这可以正常工作,SomeData正如预期的那样,但在运行Android O的两台设备上,SomeData为空。

为什么?我怎样才能使它发挥作用?

0 个答案:

没有答案