安卓电池管理器只返回1

3

我想在重复的闹钟广播器被调用时读取Android电池的状态,我的设置如下:

public class RepeatingAlarm extends BroadcastReceiver {

    @Override       
    public void onReceive(Context context, Intent intent)
    {

            // Acquire the make of the device
            final String PhoneModel = android.os.Build.MODEL;
            final String AndroidVersion = android.os.Build.VERSION.RELEASE;

            // Grab the battery information
            int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
            int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
            final float batteryPct = level / (float)scale; 
    }

}

但我不明白为什么它返回了batteryPct = 1。这里有什么我漏掉的吗?我已根据安卓谷歌页面添加了正确的权限,但似乎没有帮助。

2个回答

9
您正在同时获得levelscale-1。这是因为您可能尝试在清单中广播ACTION_BATTERY_CHANGEDACTION_BATTERY_CHANGED是一个粘性意图,您不能在清单中注册接收器。请尝试以下操作:
 Intent i = new ContextWrapper(applicationContext).registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
 // now you can get the level and scale from this intent variable
int level = i.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = i.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float battPct = level/(float)scale;

您不需要为此意图设备接收器,只需使用上述提到的方式,在任何您想要使用它的地方。

非常好,非常感谢!由于它引起了一个错误(“不允许组件注册接收意图”),我不得不对Intent i行进行一些小的更改。但现在一切都很好。 - eWizardII
1
感谢您提供这段代码。我刚刚浪费了2-3个小时的时间,才发现为什么我在广播接收器上没有获取到有关电池信息的声明。 - Javidan

2
您可能会发现levelscale变量的值都为-1(您指定的默认值),因此请尝试打印它们的值,以确保intent已正确设置这些值。
您应该监听ACTION_BATTERY_CHANGED,以在Android中获取电池电量

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接