繁体   English   中英

电池状态始终不充电

[英]Battery status is always not charging

@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始终显示“Not Charging!”。 我在实际设备上对此进行了测试,当我将其插入AC或USB电源时,它仍显示“Not Charging!” 吐司。

您无法通过清单注册ACTION_BATTERY_CHANGED ,因此您没有收到这些广播。 您正在尝试从没有这些额外内容的Intents获取BatteryManager附加功能(例如, ACTION_POWER_CONNECTED )。 因此,您将获得BATTERY_STATUS_UNKNOWN的默认值。

请尝试以下方法:

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM