Как получить значение датчика освещенности и уровень заряда батареи в любое время для Android? - PullRequest
2 голосов
/ 15 февраля 2010

Я пишу программу и могу получить значение датчика освещенности и текущий уровень заряда батареи, но изменяется только значение освещенности и при изменении уровня заряда батареи. Есть ли способ получить эти два значения в любое время? Например, когда пользователь запускает мою программу, я хотел бы сразу получить текущие значения вместо того, чтобы ждать, пока они изменятся.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2010

Если у вас есть код для получения значения при его изменении, вы можете сохранить значение в переменной, а при каждом изменении просто обновлять переменную с помощью метода установки. Затем, когда вам понадобится текущее значение в любое время, просто вызовите переменную, используя метод получения.

Так что, если ваш метод выглядит так

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

Вы можете использовать метод получения для возврата текущего уровня заряда батареи, rawlevel, и вы можете сделать то же самое для значения датчика освещенности.

0 голосов
/ 16 октября 2013

поместите это в ваш 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, и частота обновления будет намного выше.

...