2013-08-02 58 views
1

在我的項目中,我需要使用接近傳感器來管理屏幕燈。如何使用接近傳感器來管理屏幕燈:Android

從過去3天起,我試圖做同樣的事情。但我仍然沒有取得成功。

我的一半代碼工作正常。能夠使用接近傳感器關閉屏幕燈。但屏幕燈不亮。當我用手覆蓋傳感器時,屏幕指示燈熄滅。但從傳感器上取下手後,光線不會變亮。

我的代碼是:

@Override 
public void onSensorChanged(SensorEvent event) 
{ 
    if(event.sensor.getType() == Sensor.TYPE_PROXIMITY) 
    { 
     switch (lastSensorPosition) 
     { 
     //case 1 will turn on screen light 
     case 1: 
      lastSensorPosition = 2; 
      WindowManager.LayoutParams lp = getWindow().getAttributes(); 
      lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL; 
      getWindow().setAttributes(lp); 
      break; 



     //case 2 will turn off screen light 
     case 2: 
      lastSensorPosition = 1; 
      WindowManager.LayoutParams lp1 = getWindow().getAttributes(); 
      lp1.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF; 
      getWindow().setAttributes(lp1); 
      break; 

     default: 
      break; 
     } 
    } 
} 

我在等你們有很大的幫助......

回答

0
private SensorManager mSensorManager; 
private Sensor mSensor; 
... 
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 


public class SensorActivity extends Activity implements SensorEventListener { 
     private SensorManager mSensorManager; 
     private Sensor mProximity; 

     @Override 
     public final void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Get an instance of the sensor service, and use that to get an instance of 
     // a particular sensor. 
     mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
     } 

     @Override 
     public final void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // Do something here if sensor accuracy changes. 
     } 

     @Override 
     public final void onSensorChanged(SensorEvent event) { 
     float distance = event.values[0]; 
     // Do something with this sensor data. 
     } 

     @Override 
     protected void onResume() { 
     // Register a listener for the sensor. 
     super.onResume(); 
     mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL); 
     } 

     @Override 
     protected void onPause() { 
     // Be sure to unregister the sensor when the activity pauses. 
     super.onPause(); 
     mSensorManager.unregisterListener(this); 
     } 
    } 
0

一些接近傳感器返回代表「近」或「遠二進制值。 「在這種情況下,傳感器通常會報告遠端狀態下的最大量程值和近端狀態下的較小值。通常,遠值是大於5釐米的值,但是這可能因傳感器而異。您可以使用getMaximumRange()方法確定傳感器的最大範圍。