2010-02-15 6 views
2

나는 프로그램을 작성 중이며 광 센서 값과 현재 배터리 레벨을 얻을 수 있지만 빛 값만 변경되고 배터리 레벨이 변경 될 때만 가능합니다. 이 두 값을 언제든지 얻을 수있는 방법이 있습니까? 사용자가 내 프로그램을 실행할 때처럼 현재 값을 변경하기를 기다리지 않고 바로 잡으려고합니다.안드로이드에 대한 빛 센서 값 및 배터리 수준을 얻는 방법?

답변

2

변경할 때 값을받을 코드가 있으면 변수에 값을 저장할 수 있으며 모든 변경 사항에 대해 setter 메서드로 변수를 업데이트하면됩니다. 그런 다음 언제든지 현재 값이 필요할 때마다 getter 메서드를 사용하여 변수를 호출하면됩니다.

그래서 당신의 방법 당신은 currentl 배터리 수준, rawlevel을 반환하는 getter 메소드를 가질 수 있습니다이

private void monitorBatteryState() { 
    BroadcastReceiver battReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 

      context.unregisterReceiver(this); 
      int rawlevel = intent.getIntExtra("level", -1); 
      int scale = intent.getIntExtra("scale", -1); 
      int status = intent.getIntExtra("status", -1); 
      int health = intent.getIntExtra("health", -1); 
      int level = -1; // percentage, or -1 for unknown 
      if (rawlevel >= 0 && scale > 0) { 
       level = (rawlevel * 100)/scale; 
      } 
      setBatteryLevel(rawlevel); // setter method. 
      } 
    } 

public void setBatteryLevel(rawlevel) { 
    batteryLevel = rawlevel; 
} 

public int getBatteryLevel() { 
    return rawlevel; 
} 

처럼 보이는 경우, 당신은 광 센서 값에 대해 동일한 작업을 수행 할 수 있습니다.

+0

나를 위해 작동하지 않을 것입니다 그리고 그것을 연구 후 일부 나는 그것에 대해이 발견 : 현재 SDK에있는 android.os.SystemProperties 없습니다. 이것은 소스 코드에서 펌웨어에 의해서만 사용되는 클래스입니다. 빛 센서 값과 배터리 수준을 변경하지 못하게하는 다른 방법이 있습니까? – John

+0

주어진 시간에 값을 반환하는 * 직접적인 방법이 없으면 내 대답이 업데이트되었습니다. –

0

메인 액티비티에 넣으세요. 이것은 배터리 수준에 대해 다른 사람이 게시 한 것으로 보아서 만 광 센서 값입니다.

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
Sensor mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); 
//don't know if you can put lightSensorValue here, if not try adding it as a member field 
final int lightSensorValue; 

mSensorManager.registerListener(new SensorEventListener() 
{ 
    public void onAccuracyChanged(Sensor sensor, int accuracy) 
    { 
     //do something when accuracy is changed, you probably don't need this 
    } 

    public void onSensorChanged(SensorEvent event) 
    { 
     lightSensorValue = event.values[0]; 
    } 

}, mLight, SensorManager.SENSOR_DELAY_NORMAL); 

편집 : 질문을 다시 읽고 수동으로 언제든지 받으려는 것을 확인하십시오. 이 값은 값이 변경 될 때마다 업데이트되므로 항상 최신 정보를 얻습니다.

지연 변경을 SensorManager.SENSOR_DELAY_FASTEST으로 설정하면 새로 고침 빈도가 훨씬 빨라집니다.

관련 문제