2011-06-22 173 views
6

所以我正在尋找一種方法來獲取光傳感器的當前值(顯然在勒克​​斯)按下按鈕。下面是我使用來實現光傳感器的控制代碼獲取光傳感器值

public class SensorActivity extends Activity implements SensorEventListener 
{ 
private final SensorManager mSensorManager; 
private final Sensor mLight; 
int minLux = 0; 
int currentLux = 0; 
int maxLux; 

public SensorActivity() 
{ 
    mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
    mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); 
} 

protected void onResume() 
{ 
    super.onResume(); 
    mSensorManager.registerListener((SensorEventListener) this, mLight, SensorManager.SENSOR_DELAY_NORMAL); 
} 

protected void onPause() 
{ 
    super.onPause(); 
    mSensorManager.unregisterListener((SensorListener) this); 
} 

public void onAccuracyChanged(Sensor sensor, int accuracy) 
{ 
    if(sensor.getType() == Sensor.TYPE_LIGHT) 
    { 

    } 
} 

public void onSensorChanged(SensorEvent event) 
{ 
    if(event.sensor.getType() == Sensor.TYPE_LIGHT) 
    { 

    } 
} 
} 

我也有這樣的代碼使按鈕來調用一個函數

<Button android:layout_width="122px" android:id="@+id/widget35" android:text="Start" android:layout_height="wrap_content" android:layout_x="112dp" android:layout_y="249dp" android:onClick="onButtonDown"></Button> 

如何將獲得當前的流明值,而該應用程序正在後臺運行,並且如何獲取當前勒克斯值並將其存儲在按鈕按下int maxLux;

回答

8

如註釋here,不可能直接獲取當前傳感器值,而一旦更新版本的Android將在註冊偵聽器(允許您獲取基線)時立即生成onSensorChanged事件,早期版本不。因此,您唯一能做的就是希望用戶運行更新版本的Android,或者更改值,然後從onSensorChanged(例如)中的event.values [0]中檢索當前勒克斯值:

public void onSensorChanged(SensorEvent event) 
{ 
    if(event.sensor.getType() == Sensor.TYPE_LIGHT) 
    { 
     currentLux = event.values[0]; 
     if (currentLux > maxLux) 
      maxLux = currentLux; 
    } 
} 

(更改maxLux和currentLux浮動後)。這樣就會出現按鈕按下時檢索當前值的問題,這可以通過在按鈕按下時查看currentLux的值來完成。

+0

感謝您的幫助!只有當它發生變化時,我才需要一個常數值。我對你的代碼做了一些調整。 'maxLux'將是基於原始校準的常量(按下哪個按鈕),則屏幕的亮度將根據'maxLux'中currentLux的百分比而改變 – Cistoran