2010-02-15 90 views
2

我正在編寫一個程序,我能夠獲取光線傳感器值和當前電池電量,但只有光線值發生變化以及電池電量發生變化時。有沒有辦法隨時獲得這兩個值?就像用戶運行我的程序時一樣,我想立即獲取當前值,而不必等待它們改變。如何隨時爲Android獲取光線傳感器值和電池電量?

回答

2

如果你的代碼,以獲得的價值,當它改變時,你可以存儲在每一個變化的變量的值,並在剛更新的setter方法的變量。然後,無論何時您需要當前值,只需使用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; 
} 

你可以有一個getter方法返回currentl電池電量,rawlevel,並且可以爲光傳感器值做同樣的。

+0

這對我不起作用,經過研究,我發現它有一些:在當前SDK中沒有android.os.SystemProperties。這是源代碼中僅供固件使用的類。 是否有任何其他方式獲得光傳感器值和電池電量而不用等待它改變? – John 2010-02-15 06:58:55

+0

我更新了我的答案,如果在給定時間沒有* direct *方式返回值,那麼這是一種替代方法。 – 2010-02-15 14:17:28

0

把這個在您的mainActivity: 這是不僅是因爲我看到別人發佈了有關電池電量的光傳感器值。

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,並且刷新率會快很多。