我的应用程序存在很多问题已经有好几天了。如果我的英语不是那么原生,我会道歉。我实现了一个AlarmManager,为我的应用程序的用户提供了在当前或第二天的任何时间启动某项服务的选项。所以例如用户可以选择在明天上午8点将我的服务时间设置为明天,然后启动服务。
警报管理器现在应该等待从现在到所选时间的计算时间(我也手动计算时间,这是正确的!)然后启动服务。我现在的问题是,有时警报管理员正在开始我的服务而且有时候不是。似乎如果它必须等待超过4个小时,它就不再工作了,我的服务也没有被调用。我已经设置了所有必要的许可,否则它根本不起作用。您可以查看以下警报管理器的代码:
someIntent = new Intent();
someIntent.setAction("START_SERVICE");
AlarmManager alarams ;
alarmIntent = PendingIntent.getBroadcast(MainActivity.this, 0, someIntent, PendingIntent.FLAG_CANCEL_CURRENT);
alarams = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarams.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+delay, alarmIntent);
广播接收器是这样实现的(并且已注册!):
alarmReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Intent myIntent = new Intent(MainActivity.this, MyService.class);
startService(myIntent);
}
};
正如我告诉你的那样,如果它不能正常工作,它会在启动服务之前停止。
编辑: 我有个主意。我在这篇帖子中读到了一些内容:Android long running service with alarm manager and inner broadcast receiver
可能是,我的意图“someIntent”的构造函数仅适用于清单文件中声明的BroadcastReceivers。所以在我的情况下,我应该使用someIntent = new Intent("START_SERVICE")
而不是someIntent = new Intent(); someIntent.setAction("START_SERVICE")
。这种效果被称为隧道效应 - 我会弄明白,如果它有效,我会在这里发布我的经验。感谢上面提到的线程上解释得很好的答案!如果您有任何其他想法或与我相同的经历,请告诉我们!
EMU
答案 0 :(得分:0)
如果设备关闭并启动,那么您将无法获得警报广播接收器。 实现将接收OnBoot的OnBootReceiver,您可以在那里启动未触发的待处理警报。