2013-09-23 2 views
2

Мне нужно, чтобы будильник срабатывал каждый день на рассвете. я получаю время восхода солнца, как это: «6:55»Я хочу установить повторяющийся сигнал тревоги, который срабатывает каждый день в разное время.

Location location = new Location(latitude, longitude); 
SunriseSunsetCalculator calculator = new SunriseSunsetCalculator(location, "GMT"+localTime); 
String officialSunrise = calculator.getOfficialSunriseForDate(Calendar.getInstance()); 

Это означает, что каждый день время для инициирования будет отличаться.

alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, startmillis,intervalmillis, wakeUp); 

Я был бы признателен за общее руководство относительно того, в каком направлении идти.

ответ

1

Вместо того, чтобы устанавливать будильник, который будет работать в разное время каждый день. Вы должны устанавливать отдельные аварийные сигналы каждый день. Я рекомендую вам сделать это, установив будильник следующего дня после выключения будильника.

+0

Спасибо, мне нужно, чтобы пользователь установил свои предпочтения один раз, и будильник срабатывал до тех пор, пока пользователь не отменил настройки – BestSiteEditor

+0

@BestSiteEditor Основываясь на моем решении, это все еще возможно. Даже если вы можете сразу установить все сигналы тревоги, это будет так, как вы должны решить, сколько сигналов тревоги установить ... Пожалуйста, примите ответ, если я помог вам :) –

0

Android Awareness API имеет recently announced новые функции, которые обеспечивают простое решение для вашего случая использования (это позволяет избежать явного управления запросом местоположения и вычислением времени восхода солнца). Способ достижения того, что вы пытаетесь сделать, - создать и зарегистрировать TimeFence, заданный относительно восхода/захода солнца.

Например:

// Create TimeFence 
AwarenessFence sunriseFence = 
    TimeFence.aroundTimeInstant(TimeFence.TIME_INSTANT_SUNRISE, 
     0, 5 * ONE_MINUTE_MILLIS); 

// Register fence with Awareness. 
Awareness.FenceApi.updateFences(
    mGoogleApiClient, 
    new FenceUpdateRequest.Builder() 
     .addFence("fenceKey", sunriseFence, myPendingIntent) 
     .build()) 
    .setResultCallback(new ResultCallback<Status>() { 
     @Override 
     public void onResult(@NonNull Status status) { 
      if (status.isSuccess()) { 
       Log.i(TAG, "Fence was successfully registered."); 
      } else { 
       Log.e(TAG, "Fence could not be registered: " + status); 
      } 
     } 
    }); 

вы получите обратные вызовы, когда забор имеет значение TRUE, на рассвете, и когда он оценивает обратно в FALSE в 5-ти минут после восхода солнца на основе указанных выше параметров.

Пожалуйста, отметьте Fence API code snippets документы о том, как добавить пользовательскую логику приложения.

Смежные вопросы