- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我尝试将 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()
并开始遇到这些问题。
应用:
模拟器:
alarm_time.getTime().toString
以确认我设置了正确的闹钟时间getNextAlarmClock()
的变体,包括使用已弃用的常量、getTriggerTime()
和 m.getNextAlarmClock().toString()
<我完全被这个难住了。如果您对为什么我无法获取有关下一个设置闹钟的信息,或者为什么我使用 setExact()
设置的闹钟没有响起有任何想法,我会很高兴。谢谢!!!
最佳答案
AlarmClock
和 AlarmManager
是两个完全不同的东西:闹钟由时钟应用和其他应用通过 setAlarmClock() 设置。并且适合唤醒人们并且在整个系统中对用户可见(具体取决于 Android 的制造商和版本)。
这与 setExact()
完全不同,后者仅为您的应用程序设置程序警报 - 用户不可见。您可以使用 adb shell dumpsys alarm
转储当前警报列表,以帮助调试您的警报是否已正确安排。
关于java - AlarmManager.AlarmClockinfo.getNextAlarmClock() 导致 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31257252/
我想在小部件中显示下一个闹钟设置,因此我试图获取我刚刚在手机上设置的闹钟的下一个闹钟时间(15:30) 我正在使用代码: String nextAlarm = ""; if(andro
问题 当我尝试将 AlarmManager.AlarmClockInfo 对象用于 getNextAlarmClock() 时,我的应用程序抛出:Attempt to invoke virtual m
我是一名优秀的程序员,十分优秀!