Alarm Manager не работает для меня - PullRequest
2 голосов
/ 17 июня 2011

Я пытаюсь заставить работать будильник, но он ничего не делает, что я пропускаю?Мой код

        Calendar cal = Calendar.getInstance();
    Intent intent = new Intent(this, OnetimeAlarmReceiver.class);
    PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);

    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() + 3000, sender);

И мой приемник вещания выглядит следующим образом

    public class OnetimeAlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();
    }
}

Какой внутренний класс.

Чего мне не хватает?

Ответы [ 2 ]

7 голосов
/ 17 июня 2011

Для работы приемник вещания должен быть зарегистрирован, это можно сделать либо в AndroidManifest.xml, либо динамически, используя метод Context.registerReceiver().

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

2 голосов
/ 11 января 2012

Это рабочий код.

Добавить в Manifest.xml:

...
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
...
<receiver  android:process=":remote" android:name="Alarm"></receiver>
...

Код:

public class Alarm extends BroadcastReceiver 
{    
     @Override
     public void onReceive(Context context, Intent intent) 
     {   
         PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
         PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "YOUR TAG");
         wl.acquire();

         // Put here YOUR code.
         Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example

         wl.release();
     }

     public void SetAlarm(Context context)
     {
         AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
         Intent i = new Intent(context, Alarm.class);
         PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
         am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (1000 * 60 * 10), pi); // Millisec * Second * Minute
     }
}
...