android 如何随时获取光线传感器值和电池电量?

发布于 2024-08-21 07:32:51 字数 104 浏览 4 评论 0原文

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

I am writing a program and I am able to get the light sensor value and current battery level, but only the light value changes and when the battery level changes. Is there a way to get these two values anytime? Like when a user runs my program, I would like to grab the current values right away instead of having to wait for them to change.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

拥醉 2024-08-28 07:32:51

如果您有代码可以在值更改时接收该值,则可以将该值存储在变量中,并且在每次更改时只需使用 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,并且您可以对光传感器值执行相同的操作。

If you have the code to receive the value when it changes, you could store the value in a variable and when on every change just update the variable with a setter method. Then, whenever you need the current value anytime, just call the variable using a getter method.

So if your method looks like this

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

You can have a getter method to return the currentl battery level, rawlevel, and you can do the same for the light sensor value.

你如我软肋 2024-08-28 07:32:51

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

put this in your mainActivity:
this is for the light sensor value only because I see someone else has posted about the battery level.

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: i read your question again and see that you want to get it manually anytime. Well this value gets updated whenever the value is changed, so you are always getting the most recent information.

You can try setting changing the delay to SensorManager.SENSOR_DELAY_FASTEST and the refresh rate will be a lot faster.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文