【问题标题】:Android proximity sensor安卓接近传感器
【发布时间】:2022-10-09 01:51:38
【问题描述】:

几年(和几个 API)前,我做了一个应用程序,当盖子/盖子关闭时关闭屏幕(但应用程序没有进入睡眠状态)。我正在尝试再做一次,但我不记得我是否使用了接近传感器或唤醒锁。我一直在尝试使用下面的代码。如果我将手指放在传感器上,它会触发“onSensorChanged”事件,但如果我只是关闭传感器上的盖子/盖子,则不会。有什么好主意吗?

public class MainActivity extends AppCompatActivity implements SensorEventListener {
    private  SensorManager mSensorManager;
    private  Sensor mProximity;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
    }
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
    public void onSensorChanged(SensorEvent event) {
        Toast.makeText(this,"Sensor change detected", Toast.LENGTH_SHORT).show();
    }
    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL);
    }
    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(this);
    }
}   

【问题讨论】:

    标签: android sensors proximity


    【解决方案1】:

    您需要 PROXIMITY_SCREEN_OFF_WAKE_LOCK

    public class MainActivity extends AppCompatActivity implements SensorEventListener {
                    private  SensorManager mSensorManager;
                    private  Sensor mProximity;
            PowerManager powerManager;
                PowerManager.WakeLock wakeLock;
                    @Override
                    protected void onCreate(Bundle savedInstanceState) {
                        super.onCreate(savedInstanceState);
                        setContentView(R.layout.activity_main);
                        Toolbar toolbar = findViewById(R.id.toolbar);
                        setSupportActionBar(toolbar);
                        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
                        mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
            powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
                   wakeLock = powerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "aodplus:pocket_mode");
                    }
                    public void onAccuracyChanged(Sensor sensor, int accuracy) {
                    }
                    public void onSensorChanged(SensorEvent event) {
        if (sensorEvent.sensor.getType() == Sensor.TYPE_PROXIMITY) {
         boolean isNear = event.values[0] < mProximity.getMaximumRange();
                    if(isNear){
                     // near
                       turnOffScreen();
                    }
        else {
                     // far
                       turnOnScreen();
                    }
                }
                        Toast.makeText(this,"Sensor change detected", Toast.LENGTH_SHORT).show();
                    }
                    protected void onResume() {
                        super.onResume();
                        mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL);
                    }
                    protected void onPause() {
                        super.onPause();
                        mSensorManager.unregisterListener(this);
                    }
            public void turnOnScreen(){
            
                    if(wakeLock.isHeld()) wakeLock.release();
                }
            
                @TargetApi(21) //Suppress lint error for PROXIMITY_SCREEN_OFF_WAKE_LOCK
                public void turnOffScreen(){
                  wakeLock.acquire( /*10 minutes*/);
            
                }
                }   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多