首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PROXIMITY_SCREEN_OFF_WAKE_LOCK导致音频播放问题

PROXIMITY_SCREEN_OFF_WAKE_LOCK导致音频播放问题
EN

Stack Overflow用户
提问于 2012-08-28 12:24:01
回答 1查看 2.4K关注 0票数 1

我正在开发一个VOIP应用程序,我使用PROXIMITY_SCREEN_OFF_WAKE_LOCK唤醒锁,如下所示。

我注意到,在许多设备上,当接近感应器打开并且屏幕变黑时,我的应用程序的音频播放就会停止。这种情况发生在HTC、LG和华为设备上。

当传感器被触发时,是否需要采取其他措施来防止音频播放停止?我在Skype等其他VOIP应用上也注意到了同样的问题。

代码语言:javascript
复制
int PROXIMITY_SCREEN_OFF_WAKE_LOCK = 32;    
mProximityWakeLock = pm.newWakeLock(PROXIMITY_SCREEN_OFF_WAKE_LOCK, "myLock");
if(!mProximityWakeLock.isHeld()){
    mProximityWakeLock.acquire();
}

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2012-10-05 17:18:05

我们也有同样的问题。我们真正检测到的是,当WakeLock关闭屏幕时,输入套接字停止接收数据,因此我们向AudioTrack发送0。

为了改善这一点,我们停止使用PROXIMITY_SCREEN_OFF_WAKE_LOCK,现在使用SensorManager (我们已经研究了Linphone代码):

代码语言:javascript
复制
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);
    }
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12152756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档