2011-06-22 20 views
6

Así que estoy buscando una forma de obtener el valor actual del sensor de luz (obviamente en Lux) presionando un botón. Aquí está el código que estoy usando para implementar el control del sensor de luzObteniendo sensor de luz Valor

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) 
    { 

    } 
} 
} 

que también tienen este código haciendo que el botón para llamar a una función

<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> 

¿Cómo puedo obtener el valor actual mientras lux la aplicación se está ejecutando en segundo plano, y ¿cómo obtendría y almacenaría el valor lux actual al presionar el botón en int maxLux;?

Respuesta

8

Como se indica en here, no es posible obtener directamente el valor actual del sensor y, mientras que algunas versiones más recientes de Android generarán un evento onSensorChanged tan pronto como se registre el oyente (permitiéndole obtener una línea base), las versiones anteriores no. Entonces, lo único que puede hacer realmente es esperar que el usuario ejecute una versión más reciente de Android o que el valor cambie y luego recuperar el valor de lux actual de event.values ​​[0] en onSensorChanged (por ejemplo):

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

(Después de cambiar maxLux y currentLux a flotadores). Esto deja la cuestión de recuperar el valor actual en función de presionar un botón, lo que se puede hacer mirando el valor de currentLux en el momento en que se presiona el botón.

+0

¡Gracias por la ayuda! No necesito un valor constante solo cuando cambia. Hice algunos ajustes a tu código. 'maxLux' será una constante basada en la calibración original (para lo que se presiona el botón) y luego el brillo de la pantalla cambiará en función de un porcentaje de' currentLux' de 'maxLux' – Cistoran

Cuestiones relacionadas