检测在android中的每个百分比更改电池状态

时间:2012-04-17 10:10:40

标签: android power-management

我想检测每个百分比的电池更换。我能用广播接收器检测一次电池电量。但是当%从66变为67时,它不会自动更新值。

这是我的代码。

   private void batteryLevel() {
        BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                Log.i("Battery CHANGED******",":: IN RECEIVER");

                int rawlevel = intent.getIntExtra("level", -1);
                int scale = intent.getIntExtra("scale", -1);
                int level = -1;
                if (rawlevel >= 0 && scale > 0) {
                    level = (rawlevel * 100) / scale;
                }
                btnConsumer.setText("Battery Level Remaining: " + level + "%");
            }
        };
        IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryLevelReceiver, batteryLevelFilter);

    }

添加了权限

 <uses-permission android:name="android.permission.BATTERY_STATS"></uses-permission>

它检测到66但是当它改变65或67时它不会更新值。或者不显示日志

我想让它变得像我可以得到每一个改变。

提前致谢。

1 个答案:

答案 0 :(得分:12)

首先,您不需要BATTERY_STATS权限。

其次,onReceive()的第一行取消注册您的BroadcastReceiver,从而阻止您获得任何进一步的更新。

第三,无法保证每次1%的更改都会向您提供电池信息。例如,许多摩托罗拉手机每10%只发送一次ACTION_BATTERY_CHANGED,直到电池电量不足为止。关于广播ACTION_BATTERY_CHANGED的频率的决定取决于设备制造商,而不是您。