2011-06-22 11 views
6

Poszukuję więc sposobu na pobranie aktualnej wartości czujnika światła (oczywiście w Lux) za pomocą przycisku. Oto kod używam wdrożyć kontrolę czujnika światłaUzyskiwanie wartości czujnika światła

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

    } 
} 
} 

ja też mam ten kod dokonywania przycisk, aby wywołać funkcję

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

Jak uzyskać bieżącą wartość lux chwilę aplikacja działa w tle i jak mogę uzyskać i zapisać bieżącą wartość luksa po naciśnięciu przycisku na int maxLux;?

Odpowiedz

8

Jak zanotowano here, nie jest możliwe bezpośrednie pobranie aktualnej wartości czujnika i, podczas gdy niektóre nowsze wersje Androida wygenerują zdarzenie onSensorChanged natychmiast po zarejestrowaniu odbiorcy (co pozwoli uzyskać linię bazową), wcześniejsze wersje nie. Jedyne, co naprawdę możesz zrobić, to mieć nadzieję, że użytkownik uruchomił nowszą wersję Androida lub zmieni wartość, a następnie pobierze aktualną wartość luksa z event.values ​​[0] wewnątrz onSensorChanged (eg):

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

(Po zmianie wartości maxLux i currentLux na pływające). Pozostawia to problem pobierania bieżącej wartości w oparciu o naciśnięcie przycisku, co można zrobić, patrząc na wartość currentLux w momencie naciśnięcia przycisku.

+0

Dzięki za pomoc! Nie potrzebuję stałej wartości tylko wtedy, gdy się zmienia. Wprowadziłem kilka poprawek do twojego kodu. 'maxLux' będzie stałą opartą na pierwotnej kalibracji (do czego służy przyciskanie przycisku), wtedy jasność ekranu zmieni się na podstawie procentu' currentLux' z 'maxLux' – Cistoran

Powiązane problemy