2012-08-28 26 views
0

我正在開發VOIP應用程序,並使用PROXIMITY_SCREEN_OFF_WAKE_LOCK喚醒鎖,如下圖所示。PROXIMITY_SCREEN_OFF_WAKE_LOCK正在導致音頻播放問題

我注意到在很多設備上,當接近傳感器打開並且屏幕變黑時,我的應用的音頻播放停止。這發生在HTC,LG和華爲設備上。

當傳感器被觸發時,是否還需要做其他事情來阻止音頻播放停止?我注意到其他VOIP應用程序(如Skype)也存在同樣的問題。

int PROXIMITY_SCREEN_OFF_WAKE_LOCK = 32;  
mProximityWakeLock = pm.newWakeLock(PROXIMITY_SCREEN_OFF_WAKE_LOCK, "myLock"); 
if(!mProximityWakeLock.isHeld()){ 
    mProximityWakeLock.acquire(); 
} 

非常感謝!

回答

6

我們遇到了同樣的問題。我們真正發現的是,當WakeLock屏幕關閉時,輸入套接字停止接收數據,所以我們向AudioTrack發送零。

爲了改善這一點,我們不幹使用PROXIMITY_SCREEN_OFF_WAKE_LOCK現在正在使用的SensorManager(我們有一個面貌邁向Linphone中碼):

public class InCallActivity extends Activity implements SensorEventListener { 

    private SensorManager mSensorManager; 
    private Sensor mProximity; 

    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
    } 

    public void onSensorChanged(SensorEvent event) { 
     final Window window = getWindow(); 
     WindowManager.LayoutParams lAttrs = getWindow().getAttributes(); 
     View view = ((ViewGroup) window.getDecorView().findViewById(android.R.id.content)).getChildAt(0); 
     if (event.values[0] > 4) { 
      // turn on screen 
      Log.v("LlamadaActivity", "Encendemos pantalla"); 
      lAttrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      view.setVisibility(View.VISIBLE); 
     } 
     else { 
      // turn off screen 
      Log.v("LlamadaActivity", "Apagamos pantalla"); 
      lAttrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; 
      view.setVisibility(View.INVISIBLE); 
     } 
     window.setAttributes(lAttrs); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
     mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
     mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL); 

     // Para que la pantalla no se apague, y que la encienda aunque este apagada y bloqueada 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     // 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     mSensorManager.unregisterListener(this); 
    } 
} 
+0

這個工程就像一個魅力,我用event.value [0] > = 3,因爲傳感器的最大值是4,所以屏幕總是關閉。不知道這是否解決了OP問題,但是我正在尋找。 – Parmaia

+0

它的作品,是避免喚醒問題的好選擇,但對於我來說,屏幕變成白色(Nexus 6,API N預覽版4)可能與主題相關,但只是讓別人嘗試它 – behelit