0
我在隨機播放提醒用戶的服務。該服務由一個Activity啓動並作爲服務在後臺運行。電話睡着時播放聲音
我面臨的挑戰是,當用戶將手機置於睡眠狀態(空白屏幕)時,在某些情況下,聲音根本無法播放。時間已用完,但聲音不會按時播放,或在用戶喚醒電話時播放。
下面是一些代碼 /** * 開始被檢查每秒鐘多少時間 *過去了,如果時間點已經到了播放聲音一個新的線程。 *一旦時間到了,它會得到下一個響鈴時間,並繼續執行 *,直到它被用戶關閉爲止 */ private void runCheck(){ Log.i(tag,「starting 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