2012-05-15 104 views
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(); 
     } 
    }); 
} 

對不起,這裏的格式,你可能有一些這方面的技巧,以及;-)

回答

0

不能AQUIRE SCREEN_DIM_WAKE_LOCK在你的情況?

@Override 
protected void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 




PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "App"); 
wl.acquire(); 

} 
+0

我是否必須在播放聲音或創建之前獲取鎖定權限?我不太熟悉喚醒鎖。 – user929995