Android 安卓SetIndexecute-isn';我根本不开枪

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);

我有一个安卓setInexactRepeating放在我的onCreate中,它永远不会启动。我在它里面有一个日志,以确保它实际上正在执行,并且看起来没有触发,以及我为它计划的事件。我希望它每10秒响一次,但它似乎连第一次都不会响

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" />