Android BatteryManager仅返回1

时间:2013-02-11 03:07:04

标签: android broadcastreceiver battery repeatingalarm

我正在尝试在调用重复警报广播器时读取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。这里有什么我想念的吗?我根据Android Google页面添加了正确的权限,但这似乎没有帮助。

2 个答案:

答案 0 :(得分:9)

-1level都获得了scale。 那是因为你可能试图在清单中广播ACTION_BATTERY_CHANGED

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

你不会为这个意图设置一个接收器,只要使用上面提到的方式,无论你想使用它。

答案 1 :(得分:2)

对于levelscale变量(您指定的默认值),您可能获得-1,因此请尝试打印其值以确保intent具有这些值设置得当。

您应该听取ACTION_BATTERY_CHANGEDget battery level in Android