gpt4 book ai didi

android - AlarmManager.RTC 不工作?

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:49 25 4
gpt4 key购买 nike

我对ApiDemo中的AlarmController.java做了一点改动,所以我想通过AlarmManager.RTC让闹钟在手机休眠时不响。

        Intent intent = new Intent(AlarmController.this, RepeatingAlarm.class);
PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,
0, intent, 0);

// We want the alarm to go off 30 seconds from now.
long firstTime = SystemClock.elapsedRealtime();
firstTime += 15*1000;

// Schedule the alarm!
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC, //AlarmManager.ELAPSED_REALTIME_WAKEUP,
firstTime, 15*1000, sender);

接收端代码如下:

public class RepeatingAlarm extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Log.d("DEBUG", "In RepeatingAlarm.onReceive, intent=" + intent);
Toast.makeText(context, R.string.repeating_received, Toast.LENGTH_SHORT).show();
}
}

我运行了修改后的应用程序,但在手机进入休眠状态(黑屏)后,我仍然看到如下日志消息:

D/DEBUG(1390):在 RepeatingAlarm.onReceive 中,intent=Intent { flg=0x4 cmp=com.example.android.apis/.app.RepeatingAlarm(有附加功能)}

这意味着标志 AlarmManager.RTC 不起作用。谁能告诉我为什么?

谢谢。

最佳答案

由于您使用 elapsedRealtime 来获取闹钟开始时间,我认为您需要使用 ELAPSED_REALTIME标志而不是 RTcflags。

我的猜测是警报管理器认为它错过了大量警报,因为您正在使用 RTcflags,这意味着警报管理器希望您发送自 1970 年 1 月 1 日以来以毫秒为单位的时间值,但您发送的是自设备启动以来经过的毫秒数,这将是一个小得多的数字。

如果您使用 RTcflags,则需要使用 System.currentTimeMillis() 或从 Java Date 或 Calendar 对象获取以毫秒为单位的时间。如果您使用 ELAPSED_REALTIME 标志,那么您需要使用 SystemClock.elapsedRealtime()。

关于android - AlarmManager.RTC 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2368098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com