2015-03-01 8 views
0

У меня есть AlarmManager, который задан в подклассе BroadcastReceiver с использованием подкласса Service в качестве контекста. AlarmManager не стреляет. Я знаю, что AlarmManager устанавливается с правильными миллисекундами.AlarmManager With BroadcastReceiver Not Firing

Любые идеи по поводу того, почему AlarmManager не стреляет?

public class Alarm extends BroadcastReceiver 
    { 
     public static final String TAG = "Alarm"; 
     public MediaPlayer mediaPlayer; 
     public AlarmManager alarmManager; 

     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      Log.d(TAG, "Alarm set off onReceive"); 

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

      //Put to code to execute upon alarm here 

      //Check to see if the sounds are playing, if they are stop them. 
      if (mediaPlayer.isPlaying()){ 
       //Call play will simulate the user tapping the play button which will stop the sounds. 
       mediaPlayer.stop(); 
       mediaPlayer.release(); 
      } 

      wl.release(); 
     } 

     public void setAlarm(Context context, long milliSeconds, MediaPlayer mp) 
     { 
      //Set the mediaPlayer member var 
      mediaPlayer = mp; 

      //Figure out the time to stop the timer in milliseconds 
      long currentTime = System.currentTimeMillis(); 
      long timeToSetAlarmTo = currentTime+milliSeconds; 
      Log.d(TAG, "Current Time = " + currentTime + "Time to add = " + milliSeconds + "Time to set timer to = " + timeToSetAlarmTo); 

      //Create the intent 
      Intent i = new Intent("SmartlifeSoftware.START_ALARM"); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, i, 0); 

      //Set the alarm 
      alarmManager=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
      alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, timeToSetAlarmTo, pendingIntent); 

     } 

     public void CancelAlarm(Context context) 
     { 
      Intent intent = new Intent("SmartlifeSoftware.START_ALARM"); 
      PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); 
      alarmManager.cancel(sender); 
     } 
    } 

Вот мой код манифеста под тег приложения

<receiver android:name="services.Alarm" android:exported="true"> 
     <intent-filter> 
      <action android:name="SmartlifeSoftware.START_ALARM"> 
      </action> 
     </intent-filter> 
    </receiver>` 

ответ

0

я решил проблему. В методе alarmManager.set я изменил параметр int type от AlarmManager.ELAPSED_REALTIME_WAKEUP до AlarmManager.RTC_WAKEUP. RTC_WAKEUP указывает время срабатывания огня.

Из документов:

RTC_WAKEUP -Wakes до устройства на огнь ожидающего намерения в указанное время.

ELAPSED_REALTIME_WAKEUP -Время в SystemClock.elapsedRealtime() (время с момента загрузки, включая спящий режим), которое пробудит устройство, когда оно отключится.

0

Ваш сигнал тревоги не срабатывает с AlarmManager.ELAPSED_REALTIME_WAKEUP, если ваш параметр triggerAtMilis ошибочен. Вы должны изменить:

long currentTime = System.currentTimeMillis(); 
long timeToSetAlarmTo = currentTime+milliSeconds; 

в

long currentTime = SystemClock.elapsedRealtime() 
long timeToSetAlarmTo = currentTime+milliSeconds; 
Смежные вопросы