2016-10-29 5 views
0

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

public void notificationCheck() { 

    calendar.set(Calendar.HOUR_OF_DAY, Preferences.getMorningHour(getApplicationContext())); 
    calendar.set(Calendar.MINUTE, Preferences.getMorningMinute(getApplicationContext())); 
    calendar.set(Calendar.SECOND, 0); 

    final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(this, AlarmReceiver.class), 0); 

    AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
    // Sets an alarm - note this alarm will be lost if the phone is turned off and on again 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     am.setAndAllowWhileIdle(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent); 
    } else { 
     am.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 
    } 
} 

Так это должно установить сигнализацию ежедневно в 10:00, Аварийный сигнал работая нормально, пока он не выстрелил один раз. Как только будильник будет выполнен в 10:00, он будет продолжать каждый раз, когда я открою приложение.

Может кто-нибудь объяснить, если мне нужно внести какие-либо изменения в код?

EDIT:

Я использую sharedPreferences установить время Календаря Instance

Предпочтение:

public static int getMorningHour(Context context) { 
    return PreferenceManager.getDefaultSharedPreferences(context).getInt(MORNING_HOUR, 9); 
} 

public static void setMorningHour(Context context, Integer morningHour) { 
    PreferenceManager.getDefaultSharedPreferences(context).edit().putInt(MORNING_HOUR, morningHour).apply(); 
} 

public static int getMorningMinute(Context context) { 
    return PreferenceManager.getDefaultSharedPreferences(context).getInt(MORNING_MINUTE, 0); 
} 

public static void setMorningMinute(Context context, Integer morningMinute) { 
    PreferenceManager.getDefaultSharedPreferences(context).edit().putInt(MORNING_MINUTE, morningMinute).apply(); 
} 

... и я установить предпочтение в моем приложении настройке с помощью TimePicker Dialog

@Override 
public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute, int second) { 

    Preferences.setMorningHour(getApplicationContext(), hourOfDay); 
    Preferences.setMorningMinute(getApplicationContext(), minute); 

} 
+0

См. Ниже ссылки. его работа для меня. [Repeat Alarm] (http://stackoverflow.com/a/40311030/3782085) –

+0

Код тот же, я повторяю будильник ежедневно. Я прошу исправить ошибку для AlarmManager в начале действия –

+0

, вы пытаетесь использовать широковещательный приемник с этим? – Radhey

ответ

0

При запуске деятельности вам необходимо проверить будильник a уже жив или нет. если live dnt нарушает это. см. ниже код.

Intent myIntent = new Intent(MainActivity.this, MyReceiver.class); 

boolean isWorking = (PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, PendingIntent.FLAG_NO_CREATE) != null); 
if (isWorking) {Log.d("alarm", "is working");} else {Log.d("alarm", "is not working");} 

if(!isWorking) { 
    pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    int timeNotif = 5 * 60 * 1000;//time in ms, 7*24*60*60*1000 for 1 week 
    Log.d("Notif", "Notification every (ms): " + timeNotif); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), timeNotif, pendingIntent); 
    } 
+0

Это не работает, evertime i закрывается и снова открывается диспетчер аварийных сообщений MainActivity. В сущности, моя проблема с этим, диспетчер аварийных сообщений идет за прошлым значением времени. Итак, как если бы я установил Alarm на 10:50, все работает нормально, диспетчер аварийных сообщений не отключается, когда я открываю приложение и функционирую как обычно в 10:50. Но как только это время будет выполнено, приложение просто запускает диспетчер аварийных сигналов каждый раз, когда я открываю приложение –

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