2011-06-22 49 views
6

Vì vậy, tôi đang tìm cách để có được giá trị hiện tại của cảm biến ánh sáng (trong Lux rõ ràng) trên một nút bấm. Đây là mã tôi đang sử dụng để thực hiện kiểm soát của bộ cảm biến ánh sángNhận giá trị cảm biến ánh sáng

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

    } 
} 
} 

Tôi cũng có mã này làm cho nút để gọi một hàm

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

Làm thế nào tôi sẽ nhận được giá trị hiện tại trong khi lux ứng dụng đang chạy ở chế độ nền và cách tôi nhận và lưu trữ giá trị lux hiện tại trên nút nhấn vào int maxLux;?

Trả lời

8

Như đã ghi chú here, không thể trực tiếp nhận giá trị cảm biến hiện tại và, trong khi một số phiên bản Android mới hơn sẽ tạo sự kiện onSensorChanged ngay sau khi người nghe được đăng ký (cho phép bạn lấy đường cơ sở), các phiên bản trước đó thì không. Vì vậy, điều duy nhất bạn thực sự có thể làm là hy vọng rằng người dùng đang chạy phiên bản Android mới hơn hoặc giá trị thay đổi và sau đó truy lục giá trị lux hiện tại từ event.values ​​[0] bên trong onSensorChanged (ví dụ):

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

(Sau khi thay đổi maxLux và currentLux thành nổi). Điều này sau đó lá vấn đề lấy giá trị hiện tại dựa trên một nút bấm, có thể được thực hiện bằng cách nhìn vào giá trị của currentLux tại thời điểm nút được nhấn.

+0

Cảm ơn sự giúp đỡ! Tôi không cần một giá trị không đổi chỉ khi nó thay đổi. Tôi đã thực hiện một vài điều chỉnh đối với mã của bạn. 'maxLux' sẽ là hằng số dựa trên hiệu chỉnh ban đầu (những gì nhấn nút cho) sau đó độ sáng của màn hình sẽ thay đổi dựa trên tỷ lệ phần trăm của' currentLux' từ 'maxLux' – Cistoran

Các vấn đề liên quan