当我尝试将AlarmManager.AlarmClockInfo对象用于getNextAlarmClock()我的应用程序时抛出:Attempt to invoke virtual method 'long android.app.AlarmManager$AlarmClockInfo.getNextAlarmClock()' on a null object reference
我的代码的相关部分......
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());
}
}
Run Code Online (Sandbox Code Playgroud)
我正在为Android开发一个家庭/锁屏小部件应用程序.小部件中的信息需要在非特定时间更新,而不是在OS广播APPWIDGET_UPDATE操作时.我成功地按照本教程使用AlarmManager在特定时间更新小部件,并且能够使用该AlarmManager.setRepeating()函数每分钟更新一次小部件.
但是,我不需要每分钟更新一次窗口小部件,而是每隔2-3天在特定时间更新一次.所以我尝试使用AlarmManager.setExact()而不是setRepeating().该应用程序编译没有错误,似乎运行正常,但小部件不会更新,当我认为它应该.我已经确认正在向setExact()函数提交正确的时间,但由于更新未按计划进行,我想查看警报是否确实已设置.那是我尝试使用getNextAlarmClock()并开始遇到这些问题的时候.
应用程序:
仿真器:
alarm_time.getTime().toString以确认我正在设置正确的闹钟时间getNextAlarmClock()包含使用已弃用常量的变体,getTriggerTime()以及m.getNextAlarmClock().toString()我完全被这个难过了.如果您对我为何无法获得有关下一组警报的信息有任何想法,或者为什么我的警报设置setExact()没有消失,我将是一个快乐的男孩.谢谢!!!
AlarmClock并且AlarmManager是两个完全不同的东西:闹钟由Clock应用程序和其他应用程序通过setAlarmClock()设置,适合唤醒用户,并且整个系统的用户都可以看到(取决于Android的制造商和版本).
这与完全不同setExact(),它只为您的应用程序设置程序化警报 - 用户无法看到.您可以使用adb shell dumpsys alarm转储当前警报列表来帮助调试警报是否已正确安排.
| 归档时间: |
|
| 查看次数: |
3537 次 |
| 最近记录: |