Android - Wakelock的警报没有从意图启动服务

时间:2014-01-28 15:45:24

标签: android alarmmanager wakelock

我正在编写一个应用程序,并且在让我的Alarm BroadcastReceiver启动所需的意图时遇到了一些麻烦。代码如下:

 public void onReceive(Context context, Intent intent) 
 {

     Log.d("Alarm:","Running WakeLock");

     PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
     PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
     wl.acquire();
     WakeMe.wakelock = wl;

     Log.d("Alarm:","Running Intent (Service)");
     Intent i = new Intent(context, serviceCode.class);
     context.startService(i);

 }

 public void SetAlarm(Context context)
 {
     AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
     Intent i = new Intent(context, Alarm.class);

     PendingIntent pi = PendingIntent.getService(context, 1, i, 0);
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60000, pi); // Millisec * Second * Minute
     Log.d("Alarm:", "Alarm set to run every 1 minute/s");
 }

当调用SetAlarm()时,代码运行onReceive()并运行serviceCode类,它还会设置警报并每1分钟运行一次警报。我发现的问题是,当警报触发并运行唤醒锁时,它不会启动serviceCode并运行。相反,它只是忽略了新的意图。

注意:唤醒锁在serviceCode结束时释放。

任何帮助都是apreciated

1 个答案:

答案 0 :(得分:1)

RTC_WAKEUP与服务PendingIntent一起使用,就像在这里一样,是不可靠的。而且,它与您的onReceive()方法无关。如果您希望PendingIntent在发生警报事件时获得控制权,则需要使用广播BroadcastReceiver

如果您想使用_WAKEUP警报,我强烈建议您use WakefulBroadcastReceivermy WakefulIntentService,而不是手动滚动您自己的WakeLock逻辑。