2013-07-18 7 views
5

Моя программа предназначена для создания повторяющегося сигнала тревоги, который инициирует вещательный приемник, в свою очередь, делая уведомление. Тревога повторяется с использованием введенного пользователем интервала.AlarmManager setRepeating()

Например, если я хочу, чтобы будильник срабатывал каждые 10 секунд, как мне это сделать?

am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 10000, calpendingintent); 

Это право? и мой радиоприемник по какой-то причине не вызван.

public static void createAlarms(Context mcontext) { 
    cal = Calendar.getInstance(); 
    cal.add(Calendar.HOUR, alarmintervalint); 
    calintent = new Intent(mcontext, AlarmBroadcastReceiver.class); 
    calpendingintent = PendingIntent.getBroadcast(mcontext.getApplicationContext(), 12345, calintent, 0); 
    am = (AlarmManager)mcontext.getSystemService(Activity.ALARM_SERVICE); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 10000, calpendingintent); 
} 

Мой класс BroadcastReceiver не вызывается и Im не уверен, что "setRepeating()" метод Im использованием установлен правильно ..

Пожалуйста, помогите!

+0

Если у вас все еще есть проблемы, я предлагаю вам следовать этому руководству, это действительно полезно: http://code4reference.com/2012/07/tutorial-on-android- alarmmanager /. Это помогло мне справиться с AlarmManager. –

+0

спасибо, я посмотрю! –

ответ

-1

воспользуйтесь пожалуйста. Надеюсь, что это решит вашу проблему

am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY, AlarmManager.INTERVAL_DAY, pi);

+0

В чем разница между неточным и нормальным? И я не хочу устанавливать интервал на один день. Это введенная пользователем переменная (целое число) –

+0

Используйте setInexactRepeating() вместо setRepeating(). Когда вы используете setInexactRepeating(), Android синхронизирует повторяющиеся сигналы тревоги из нескольких приложений и одновременно запускает их. Это уменьшает общее количество раз, когда система должна разбудить устройство, что уменьшает утечку аккумулятора. Начиная с Android 4.4 (API уровня 19), все повторяющиеся сигналы тревоги неточны. Обратите внимание, что в то время как setInexactRepeating() является улучшением по сравнению с setRepeating(), он все равно может перегружать сервер, если каждый экземпляр приложения попадает на сервер примерно в одно и то же время. Поэтому для сетевых запросов добавьте некоторую случайность в свои сигналы тревоги –

5

использовать этот код

AlarmManager alarmMgr; 
    PendingIntent pendingIntent; 

    public void startAlarmManager() 
     { 
      Intent dialogIntent = new Intent(getBaseContext(), AlarmBroadcastReceiver.class); 

        alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
        pendingIntent = PendingIntent.getBroadcast(this, 0, dialogIntent,PendingIntent.FLAG_CANCEL_CURRENT); 

        alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), 10000, pendingIntent); 

       } 
     } 

погоду вы хотите, чтобы остановить тревогу

public void stopAlarmManager() 
{   
    if(alarmMgr != null) 
     alarmMgr.cancel(pendingIntent); 
} 

помнить не забудьте зарегистрировать приемник в файле манифеста

<receiver android:name=".AlarmBroadcastReceiver" > 
     </receiver> 
+0

это приятно! Благодарю. но мой будильник вызовет уведомление, поэтому мне нужно внести изменения? –

+0

не нужно изменять в уведомлении –

+0

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

-1
Calendar cal = Calendar.getInstance(); 
    cal.add(Calendar.SECOND, 30); 

    long time = cal.getTimeInMillis(); 

    Intent i = new Intent(G.context, BootCompleteReceiver.class); 

    PendingIntent pi = PendingIntent.getBroadcast(G.context, 0, i, 0); 

    G.alarmManager.set(AlarmManager.RTC_WAKEUP, time, pi); 
+0

В заданном вопросе он готов установить повторяющуюся тревогу, ваше решение только вызовет тревогу один раз. –

+0

Уважаемый друг, я снова проверю этот код и отредактирую его. –

+0

Спасибо, это было бы лучше, поскольку новый ученик не смутился этим. –

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