2013-07-01 7 views
4

我是新來的Android的傳感器使用,現在有點困惑。我只有在有明顯的光線變化時才需要執行一些操作,例如光線在黑暗的房間裏打開。到目前爲止,我有一個非常簡單的默認實現。我怎麼能告訴系統我只想對一個重大的燈光變化做出反應?安卓光線感應器 - 檢測到明顯的光線變化

   public class MainActivity extends Activity implements SensorEventListener { 

private SensorManager mSensorManager; 
private Sensor mLight; 
private RelativeLayout mLayout; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); 
    mLayout = (RelativeLayout) findViewById(R.id.mLayout); 
    mLayout.setKeepScreenOn(true); 
} 

@Override 
protected void onResume() { 
    mSensorManager.registerListener(this, mLight, 
      SensorManager.SENSOR_DELAY_FASTEST); 
    super.onResume(); 
} 

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

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

     // TODO 
    } 

} 

@Override 
public void onSensorChanged(SensorEvent event) { 

    if (event.sensor.getType() == Sensor.TYPE_LIGHT) { 

     // TODO 
    } 

} 

    } 

回答

12

試試下面的代碼: -

import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.app.Activity; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

TextView textLIGHT_available, textLIGHT_reading; 

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

     textLIGHT_available 
     = (TextView)findViewById(R.id.LIGHT_available); 
     textLIGHT_reading 
     = (TextView)findViewById(R.id.LIGHT_reading); 

    SensorManager mySensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 

    Sensor LightSensor = mySensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); 
    if(LightSensor != null){ 
     textLIGHT_available.setText("Sensor.TYPE_LIGHT Available"); 
     mySensorManager.registerListener(
     LightSensorListener, 
     LightSensor, 
     SensorManager.SENSOR_DELAY_NORMAL); 

    }else{ 
     textLIGHT_available.setText("Sensor.TYPE_LIGHT NOT Available"); 
    } 
    } 

    private final SensorEventListener LightSensorListener 
    = new SensorEventListener(){ 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
    // TODO Auto-generated method stub 

    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
    if(event.sensor.getType() == Sensor.TYPE_LIGHT){ 
    textLIGHT_reading.setText("LIGHT: " + event.values[0]); 
    } 
    } 

    }; 

} 
+0

所以,如果我理解正確,光變化數據存儲在「值」數組? – Droidman

+0

是的,它是正確的 –

+0

以及問題是我如何檢測如果光線變化是顯着的..您的實施將對任何變化作出反應 – Droidman

0

如果只是一個光變你可以檢查是否光傳感器值爲0。如果你像檢測一些奇怪的變化27至20出於特定的原因,那麼我認爲你可能不得不使用機器學習。

+0

後立即對它進行測試,你能解釋一下嗎?我會說這對於這樣一個簡單的一維信號來說是一個巨大的矯枉過正 – Antek