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

Меня скорее интересует, относится ли это к моему устройству (Nexus 4, Android 4.3, стандартная прошивка), но у меня есть будильник, зарегистрированный один раз через AlarmManager. При срабатывании устройство настроено на вибрацию в течение двух секунд. Если будильник срабатывает при включенном устройстве, то он корректно вибрирует две секунды. Однако, если будильник срабатывает, когда устройство выключено (и отсоединено от сети), вибрация начинается, но не прекращается до тех пор, пока не будет нажата кнопка питания (чтобы разбудить устройство). Вот код для регистрации тревоги:

public static void registerAlarm(Context context, int uniqueId, long triggerAlarmAt)
{
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.setAction("com.myapp.ALARM_EVENT");
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), uniqueId, intent, 0);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAlarmAt, pendingIntent);
}

И код получателя:

public class AlarmReceiver extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context, Intent arg1)
    {
        Toast.makeText(context, "Test of alarm", Toast.LENGTH_LONG).show();
        Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
        vibrator.vibrate(2000);
    }
}

Любые идеи о том, почему это происходит или как это предотвратить?


person Chris Knight    schedule 20.08.2013    source источник


Ответы (1)


Наконец-то разобрался с этим. Мой безобидный «тост», который срабатывает до вибрации, заставлял вибратор зависать до тех пор, пока тост не был завершен. Тост не показывался, пока экран не был включен, и это каким-то образом блокировало завершение вибрации. Удаление Toast решило мою проблему, и вибрация прекратилась через две секунды, как и ожидалось, даже при выключенном экране.

person Chris Knight    schedule 21.08.2013