Я использую услугу, которая напоминает пользователя в случайных интервалах. Эта служба запускается с помощью Activity и работает в фоновом режиме как служба.Воспроизведение звука, когда телефон спит
Задача, с которой я столкнулся, заключается в том, когда пользователь ставит телефон в сон (пустой экран), в некоторых случаях звук просто не воспроизводится. Время закончилось, но звук не будет воспроизводиться либо вовремя, либо воспроизводится, когда пользователь просыпается по телефону.
Вот код /** * начинает новый поток, который проверяет каждую секунду, сколько времени * истекшее и если точка пришло время воспроизведения звука. * По прошествии времени он получает следующее время звонка и продолжает * до тех пор, пока пользователь не отключится */ private void runCheck() { Log.i (тег, «start runCheck»);
Thread thread = new Thread() {
public void run() {
Log.i(tag, "starting LogoTimerThread");
while (vRunningFlag) {
try {
// update the notification
makeNotification();
Log.v(tag,
"Next Ring in : ["
+ helper.TimeCalculator
.duration2_hh_MM_SS((vTimerNextRing - System
.currentTimeMillis())/1000)
+ " sec.]");
// check if time has run out
if (vTimerNextRing < System.currentTimeMillis()) {
// reset the timer
setNextRingTime();
// update the screen
makeNotification();
// play the sound
playLTimerSound();
}
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Log.i(tag, "finished LogoTimerThread");
}
};
thread.start();
}
Вся служба работает как удаленный сервис, который установлен на переднем плане, поэтому уведомление напоминает пользователю о службе, и он может остановить это таким образом.
Как только я прокомментирую playLTimerSound(), таймер просто начнет отсчет. Каким-то образом поток прекращается, играя звук.
Здесь IST этой функции, а также:
public void playLTimerSound() {
Log.i(tag, "playLogoTimerSound - volume:" + vVolume);
MediaPlayer mp = MediaPlayer.create(this, R.raw.enterprise);
mp.setVolume(2.0f, 2.0f);
mp.start();
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();
}
});
}
Извините за форматирование здесь, вы можете иметь некоторые советы по этому вопросу, а также ;-)
Должен ли я приобрести замок прямо перед воспроизведением звука или при создании? Я не знаком с вакелоками. – user929995