[英]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.