【问题标题】:How to get light sensor value and battery level anytime for android?如何随时获取 Android 的光传感器值和电池电量?
【发布时间】:2010-02-15 03:23:08
【问题描述】:

我正在编写一个程序,我能够获取光传感器值和当前电池电量,但只有光值变化以及电池电量何时变化。有没有办法随时获得这两个值?就像用户运行我的程序一样,我想立即获取当前值,而不必等待它们更改。

【问题讨论】:

    标签: android battery sensors


    【解决方案1】:

    如果您有代码在值更改时接收值,您可以将值存储在变量中,并且在每次更改时只需使用 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 方法返回当前电池电量rawlevel,您也可以对光传感器值执行相同操作。

    【讨论】:

    • 这对我不起作用,经过研究,我发现了一些关于它的信息:当前 SDK 中没有 android.os.SystemProperties。这是源代码中的一个类,仅供固件使用。有没有其他方法可以在不等待改变的情况下获取光传感器值和电池电量?
    • 我更新了我的答案,如果没有直接方法在给定时间返回值,这是一种替代方法。
    【解决方案2】:

    把它放在你的 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,刷新率会快很多。

    【讨论】:

      猜你喜欢
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      相关资源
      最近更新 更多