AlarmManager Elapsed实时不工作?

时间:2015-02-18 01:41:14

标签: android service alarmmanager alarms

所以我对已经过时的实时闹钟不熟悉,我试图在手机开机后运行我的服务,但服务似乎没有运行。

设置闹钟。

Intent sintent=new Intent(getApplicationContext(),alrmsetter.class);
        PendingIntent setter= PendingIntent.getService(getApplicationContext(),137,sintent,0);
        AlarmManager mmanager=(AlarmManager)getSystemService(ALARM_SERVICE);
        mmanager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,6*1000,setter);

服务

public class alrmsetter extends Service
{
    public IBinder onBind(Intent intent)
    {
        return null;
    }

    public int onStartCommand(Intent intent, int flags, int startId)
    {
       Log.i("AREW","CLASS STRTED?");
        return super.onStartCommand(intent, flags, startId);

    }
}

1 个答案:

答案 0 :(得分:1)

  

我试图在手机开机后运行我的服务,但服务似乎无法运行

警报不会在重新启动后持续存在,因此无论您是在关闭手机之前设置闹钟,除非再次设置,否则下次启动时不会触发警报。

这实际上是BOOT_COMPLETED广播意图行动的用途。它使应用程序能够在启动时设置(或重置)其警报。这篇dev guide讨论了如何使用它。如果您的目标是Android 5.0+,您通常可以使用JobScheduler以类似的方式触发服务,并且它会为您保留工作。

在您的情况下,您尝试在设备启动后#6; 6秒钟设置闹钟。这可能是棘手的,因为经过的实时时钟从低级引导阶段开始,到偶数BOOT_COMPLETED时,它在大多数设备上都会超过6秒。

如果您确实需要在启动时 执行某些操作,请直接在BOOT_COMPLETED收件人处理程序中处理(即在那里启动您的服务)。如果您需要在该点之后重复操作,请使用警报。