2

几天来,我的应用程序遇到了一个大问题。如果我的英语不是那么地道,我很抱歉。我实现了一个 AlarmManager,让我的应用程序的用户可以选择在当前或第二天的任何时间启动某个服务。因此,例如,用户可能选择将我的服务时间设置为明天上午 08:00,然后启动服务。

警报管理器现在应该等待计算的时间从现在到选择的时间(我也手动计算了时间,它是正确的!)然后启动服务。我现在的问题是,有时警报管理器正在启动我的服务,而有时却没有。似乎如果它必须等待让我们说超过 4 小时,它就不再工作了,我的服务也没有被调用。我已经设置了所有必要的许可,否则它根本不起作用。你可以看看下面的alarmmanager的代码:

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 internal broadcast receiver

可能是,我的意图“someIntent”构造函数仅适用于清单文件中声明的广播接收器。所以在我的情况下,我可能应该使用someIntent = new Intent("START_SERVICE")而不是someIntent = new Intent(); someIntent.setAction("START_SERVICE"). 这种效应称为隧道效应——我会弄清楚的,如果它有效,我会在这里发布我的经验。感谢您在提到的线程上得到很好的解释!如果您有其他想法或和我一样的经历,请告诉我!鸸

4

1 回答 1

0

如果设备关闭并启动,那么您将无法获得警报管理广播接收器。实施 OnBootReceiver 它将接收 OnBoot 完成,您可以在那里启动未触发的挂起警报。

于 2012-05-10T10:04:28.040 回答