Текст в речь, когда телефон спит - Android - PullRequest
1 голос
/ 17 января 2011

У меня есть приложение, которое использует текст в речь, чтобы каждые 10 минут информировать пользователя о том, что прошло 10 минут.В настоящее время он работает нормально, но если вы спите в телефоне (нажмите кнопку питания), он больше не воспроизводит звук.

Как воспроизвести эти звуки, даже если телефон спит?

1 Ответ

5 голосов
/ 17 января 2011

Как правило, ваш код не работает, если divice переходит в спящий режим. Чтобы ваш код работал, вам нужно приобрести WakeLock у PowerManager . Но в вашем случае вам не нужно постоянно приобретать WakeLock. Вам нужно будить ваше приложение каждые 10 минут. В противном случае ваше приложение будет просто кушать батарею, ничего не делая.

Для периодического пробуждения приложения необходимо использовать специальный Android AlarmManager .

.

Вот пример:

Intent myIntent = new Intent(getApplicationContext(), YourActivity.class);    
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 1,  myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, interval, pendingIntent);

Вы также можете отправлять трансляции, которые вы будете обрабатывать в своей Службе (если вы не хотите использовать Активность).

РЕДАКТИРОВАТЬ : Воспроизведение не начнется, если вы явно не создадите SCREEN_DIM_WAKE_LOCK. Обратите внимание, что PARTIAL_WAKE_LOCK не будет работать с воспроизведением (не знаю почему, возможно, это ошибка).

PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Music");
wakeLock.acquire();
...start playback...
wakeLock.release();

EDIT : добавлен проект, который показывает пример запуска воспроизведения каждые 60 секунд (даже когда экран выключен и USB-кабель отключен). Его можно найти здесь: http://code.google.com/p/playevery60/

...