2012-08-28 3 views
0

VOIP 앱을 개발 중이며 아래 그림과 같이 PROXIMITY_SCREEN_OFF_WAKE_LOCK 잠자기 잠금을 사용합니다.PROXIMITY_SCREEN_OFF_WAKE_LOCK이 (가) 오디오 재생 문제를 일으키고 있습니다.

많은 기기에서 근접 센서가 켜지고 화면이 검은 색으로 변하면 내 앱의 오디오 재생이 중지된다는 사실을 알고있었습니다. 이것은 HTC, LG 및 Huawei 기기에서 발생합니다.

센서가 트리거 될 때 오디오 재생이 중지되지 않도록 추가적으로 수행해야 할 작업이 있습니까? 나는 Skype와 같은 다른 VOIP 응용 프로그램에서 같은 문제를 발견했습니다.

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

감사합니다.

답변

6

같은 문제가있었습니다. 우리가 실제로 감지 한 것은 WakeLock에서 스크린이 꺼져있을 때 입력 소켓이 데이터 수신을 중단했기 때문에 AudioTrack에 0을 보냈다는 것입니다. 그것을 개선하기 위해

, 우리가 SensorManager를 사용하는 지금 PROXIMITY_SCREEN_OFF_WAKE_LOCK를 사용하고 종료 (우리가 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

wakelock 문제를 피할 수있는 좋은 대안이지만 화면은 흰색으로 변합니다 (Nexus 6, API N 미리보기 4). 테마와 관련이있을 수 있지만 다른 사람들이 시도해 볼 수 있습니다. – behelit