Android 安卓SetIndexecute-isn';我根本不开枪
我有一个安卓setInexactRepeating放在我的onCreate中,它永远不会启动。我在它里面有一个日志,以确保它实际上正在执行,并且看起来没有触发,以及我为它计划的事件。我希望它每10秒响一次,但它似乎连第一次都不会响Android 安卓SetIndexecute-isn';我根本不开枪,android,android-intent,alarmmanager,repeat,android-pendingintent,Android,Android Intent,Alarmmanager,Repeat,Android Pendingintent,我有一个安卓setInexactRepeating放在我的onCreate中,它永远不会启动。我在它里面有一个日志,以确保它实际上正在执行,并且看起来没有触发,以及我为它计划的事件。我希望它每10秒响一次,但它似乎连第一次都不会响 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("Restart", "First");
Intent toRun = new Intent(this, AlarmRestart.class);
PendingIntent pendingToRun = PendingIntent.getBroadcast(this, 0, toRun, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.cancel(pendingToRun);
am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis(), 10000L, pendingToRun);
Log.d("Restart", "Second");
}
这在另一个文件中:
public class AlarmRestart extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Log.d("Restart", "Third");
}
}
这就是“adb外壳转储系统警报”所说的
AlarmRestart
是一个广播接收器
。它不是服务
。但是您正在尝试使用getService()
pendingent
。那是行不通的。将getService()
更改为getBroadcast()
,您的运气会更好。我发现了问题:/
<reciever android:name="com.appName.restart.AlarmRestart" android:enabled="true" />
拼写为receiver…不是receiver。说真的,XML需要一个错误检查器。我仍然将Commonware的答案标记为已接受的答案,因为他解决了我以后可能遇到的其他几个问题 您可以在经过的\u实时\u唤醒警报中使用SystemClock.elapsedRealtime(),而不是System.currentTimeMillis()可能是问题的一部分。谢谢您的建议!这应该只是取消了之前的setInexactRepeating,我在没有它的情况下尝试了它,但仍然有相同的效果。这是我绝对没有意识到有区别的东西。非常感谢。我正在修改代码以反映您的建议,但它仍然跳过广播接收器而没有错误消息。@Lethjakman:首先,您最好切换到
setRepeating()
,因为您不能对任意间隔进行不精确的重复,只能重复文档中列出的setInexactRepeating()
。其次,您可能希望将第一次事件安排在稍晚的将来。除此之外,从命令行使用adb shell dumpsys alarm获取所有注册的AlarmManager
报警的日志,并查看应用程序的功能。我正在寻找一个可以实现此功能的命令!我开始认为它根本不存在!更有趣的是,它说我的应用程序已经唤醒了335次……这绝对是一个巨大的帮助。非常感谢。我不确定它是否只是求助于“setRepeating”,但为了将来的参考,现在它都工作了,我用这段代码尝试了“setInexactRepeating”,它的响应是正常的。再次感谢您的回答,它们非常有用。代码不应该使用“SystemClock.elapsedRealtime()”而不是“System.currentTimeMillis()”?是的,我愚蠢的同事也做了同样的事情,我们看了一个小时。
<reciever android:name="com.appName.restart.AlarmRestart" android:enabled="true" />