gpt4 book ai didi

java - AlarmManager.AlarmClockinfo.getNextAlarmClock() 导致 NullPointerException

转载 作者:太空宇宙 更新时间:2023-11-03 11:43:05 28 4
gpt4 key购买 nike

问题

当我尝试将 AlarmManager.AlarmClockInfo 对象用于 getNextAlarmClock() 时,我的应用程序抛出:Attempt to invoke virtual method 'long android. app.AlarmManager$AlarmClockInfo.getNextAlarmClock()' 在空对象引用上

我的代码

我代码的相关部分...

public class MyAppWidget extends AppWidgetProvider {

private PendingIntent my_svc = null;

public void onUpdate(Context c, AppWidgetManager awm, int[] appWidgetIds) {

final AlarmManager m = (AlarmManager)c.getSystemService(Context.ALARM_SERVICE);
final Calendar alarm_time = Calendar.getInstance();
final Intent i = new Intent(c, MyService.class);

// set alarm for 2015-Jul-7 10:35:55 AM
alarm_time.setStime(new Date(2015,7,7,10,35,55));

// set up the service if necessary
if ( my_svc == null ) {
my_svc = PendingIntent.getService(c, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
}

// set the alarm
m.setExact(AlarmManager.RTC, alarm_time.getTime().getTime(), my_service);

// now write a log message to confirm the alarm was set
// **THIS IS THE CODE THAT THROWS THE EXCEPTION**
AlarmManager.AlarmClockInfo aci = m.getNextAlarmClock();
Log.v("MyAppWidget", "next alarm at: " + aci.toString());
}
}

背景信息

我正在为 Android 开发主屏幕/锁屏小部件应用程序。除了操作系统广播 APPWIDGET_UPDATE 操作之外,小部件中的信息需要在非常特定的时间更新。我成功关注了this tutorial on using AlarmManager to update widgets at specific times ,并且能够使用 AlarmManager.setRepeating() 函数每分钟更新一次我的小部件。

但是,我不需要每分钟更新一次小部件,只需要在每 2-3 天发生的特定时间更新一次。所以我尝试使用 AlarmManager.setExact() 而不是 setRepeating()。该应用程序编译没有错误并且运行得很好,但是小部件没有在我认为应该更新的时候更新。我已经确认将正确的时间提交给 setExact() 函数,但由于更新没有按计划进行,我想看看是否真的设置了闹钟。就在那时,我尝试使用 getNextAlarmClock() 并开始遇到这些问题。

应用/模拟器规范

应用:

  • minSdkVersion: 21
  • targetSdkVersion: 22

模拟器:

  • 名称:Nexus 5 API 22
  • CPU/ABI:Google API 的 Intel Atom (x86)
  • 目标:Google API(API 级别 22)
  • SD卡:100M
  • 启用 GPU:是
  • 内存大小:2GB

我尝试过的事情

  • 记录 alarm_time.getTime().toString 以确认我设置了正确的闹钟时间
  • 确认闹钟时间为 future 时间(通过在模拟器上手动设置时间)
  • Solutions suggested by this SO thread
  • getNextAlarmClock() 的变体,包括使用已弃用的常量、getTriggerTime()m.getNextAlarmClock().toString()<

我完全被这个难住了。如果您对为什么我无法获取有关下一个设置闹钟的信息,或者为什么我使用 setExact() 设置的闹钟没有响起有任何想法,我会很高兴。谢谢!!!

最佳答案

AlarmClockAlarmManager 是两个完全不同的东西:闹钟由时钟应用和其他应用通过 setAlarmClock() 设置。并且适合唤醒人们并且在整个系统中对用户可见(具体取决于 Android 的制造商和版本)。

这与 setExact() 完全不同,后者仅为您的应用程序设置程序警报 - 用户不可见。您可以使用 adb shell dumpsys alarm 转储当前警报列表,以帮助调试您的警报是否已正确安排。

关于java - AlarmManager.AlarmClockinfo.getNextAlarmClock() 导致 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31257252/

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