2010-02-15 3 views
2

Je suis en train d'écrire un programme et je suis capable d'obtenir la valeur du capteur de lumière et le niveau actuel de la batterie, mais seulement la valeur de la lumière change et quand le niveau de la batterie change. Y a-t-il un moyen d'obtenir ces deux valeurs à tout moment? Comme quand un utilisateur exécute mon programme, je voudrais attraper les valeurs actuelles tout de suite au lieu de devoir attendre qu'elles changent.Comment obtenir la valeur du capteur de lumière et le niveau de la batterie à tout moment pour Android?

Répondre

2

Si vous avez le code pour recevoir la valeur quand il change, vous pouvez stocker la valeur dans une variable et quand à chaque changement il suffit de mettre à jour la variable avec une méthode de setter. Ensuite, chaque fois que vous avez besoin de la valeur actuelle, appelez simplement la variable en utilisant une méthode getter.

Donc, si votre méthode ressemble à ce

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

Vous pouvez avoir une méthode de lecture pour ramener le niveau de la batterie currentl, rawlevel, et vous pouvez faire de même pour la valeur de capteur de lumière.

+0

qui ne fonctionnerait pas pour moi et après avoir fait des recherches, je l'ai trouvé à ce sujet: Il n'y a pas de android.os.SystemProperties dans le SDK actuel. C'est une classe dans le code source pour une utilisation par le firmware uniquement. Existe-t-il un autre moyen d'obtenir la valeur du capteur de lumière et le niveau de la batterie sans attendre qu'il change? – John

+0

J'ai mis à jour ma réponse, c'est une approche alternative s'il n'y a pas de moyen * direct * pour renvoyer la valeur à un moment donné. –

0

mettez cela dans votre mainActivité: c'est pour la valeur de capteur de lumière seulement parce que je vois quelqu'un d'autre a posté sur le niveau de la batterie.

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

EDIT: j'ai relu votre question et je vois que vous voulez l'obtenir manuellement à tout moment. Eh bien, cette valeur est mise à jour chaque fois que la valeur est modifiée, de sorte que vous obtenez toujours les informations les plus récentes.

Vous pouvez essayer de régler le retard à SensorManager.SENSOR_DELAY_FASTEST et le taux de rafraîchissement sera beaucoup plus rapide.

Questions connexes