6
@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
    BatteryManager.BATTERY_STATUS_UNKNOWN);

    if (status == BatteryManager.BATTERY_STATUS_CHARGING
        || status == BatteryManager.BATTERY_STATUS_FULL)
        Toast.makeText(context, "Charging!", Toast.LENGTH_SHORT).show();
    else
        Toast.makeText(context, "Not Charging!", Toast.LENGTH_SHORT).show();
}

显现:

<receiver android:name=".receiver.BatteryReceiver">
    <intent-filter>
        <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
        <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
        <action android:name="android.intent.action.BATTERY_CHANGED" />
    </intent-filter>
</receiver>

在此代码中,Toast 始终显示“未充电!”。我在实际设备上进行了测试,当我将其插入 AC 或 USB 电源时,它仍然显示“未充电!” 吐司。

4

2 回答 2

6

您无法ACTION_BATTERY_CHANGED通过清单注册,因此您不会收到这些广播。您正试图从中获得BatteryManager额外的东西Intents,而不是那些额外的东西(例如,ACTION_POWER_CONNECTED)。结果,您将获得 的默认值BATTERY_STATUS_UNKNOWN

于 2012-07-22T18:32:50.477 回答
3

尝试以下操作:

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);

'status' 现在将是 1 到 5 之间的值:

1 = Unknown
2 = Charging
3 = Discharging
4 = Not Charging
5 = Full

你的代码:

if (status == BatteryManager.BATTERY_STATUS_CHARGING
    || status == BatteryManager.BATTERY_STATUS_FULL) ...

可以写成:

if (status == 2 || status == 5) ...

两者是相同的,因为 BatteryManager.BATTERY_STATUS_CHARGING 是一个始终等于 2 的常量,而 BatteryManager.BATTERY_STATUS_FULL 是一个始终等于 5 的常量。

于 2013-01-07T18:38:19.753 回答