如何在android中启用接近传感器

时间:2014-04-02 10:46:34

标签: android android-sensors power-management proximity

我已在我的代码中成功配置了proximeter。现在我要关掉&在屏幕上以编程方式。传感器代码工作正常,下面的方法也被调用。

@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    WakeLock screenWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"screenWakeLock");

    if (event.values[0] == 0) {
        screenWakeLock.acquire();
        Log.e("onSensorChanged","NEAR");
    } else {
        if (screenWakeLock != null) {
               if(screenWakeLock.isHeld())
                  screenWakeLock.release();
               screenWakeLock = null;
        }
        Log.e("onSensorChanged","FAR");  
    }
} 

我的问题是屏幕没有关闭。我还在代码中添加了必需的权限。还有什么可能的原因???

3 个答案:

答案 0 :(得分:2)

检查为此代码https://github.com/jitsi/jitsi-android/compare/6d356fa637ae...7aba481d773f

提交的更改
getPowerManager().newWakeLock( 32, "proximity_off");

答案 1 :(得分:2)

从我的理解wakelock开始,有助于保持屏幕显示。我没有成功打开屏幕&使用它。

因此,首先我将屏幕亮度调暗尽可能低,然后使所有GUI元素都不可点击。这样我解决了我的问题。

以下是方法:

@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub  
    WindowManager.LayoutParams params = this.getWindow().getAttributes();

    if (event.values[0] == 0) {
        //TODO Store original brightness value
        params.screenBrightness = 0.004f;
        this.getWindow().setAttributes(params);
        enableDisableViewGroup((ViewGroup)findViewById(R.id.YOUR_MAIN_LAYOUT).getParent(),false);
        Log.e("onSensorChanged","NEAR");

    } else {
        //TODO Store original brightness value          
        params.screenBrightness = -1.0f;
        this.getWindow().setAttributes(params);                     
        enableDisableViewGroup((ViewGroup)findViewById(R.id.YOUR_MAIN_LAYOUT).getParent(),true);
        Log.e("onSensorChanged","FAR");  
    }       
}  

From here,我参考了禁用整个屏幕视图的触摸。

答案 2 :(得分:1)

尝试此快捷方式:

PowerManager manager = getPowerManager();
WakeLock lock = manager.newWakeLock( 32, "proximity_off");
lock.acquire();

上述代码甚至不需要接收接近传感器改变的事件。 32适用于WakeLock InCallActivity和其他类似应用程序使用的隐藏Phone字段。