Java 电池状态始终不充电
舱单:Java 电池状态始终不充电,java,android,status,power-management,Java,Android,Status,Power Management,舱单: @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
@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();
}
在这段代码中,土司总是显示“不收费!”。我在一台实际的设备上测试了这一点,当我将其插入交流或USB电源时,它仍然显示“不充电!”吐司。您无法通过清单注册
操作\u电池\u更改
,因此您没有收到这些广播。您正试图从意图
获取未连接这些额外功能的电池管理器
额外功能(例如,操作电源
)。因此,您将获得电池状态未知的默认值,请尝试以下操作:
<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>
“状态”现在将是介于1和5之间的值:
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
您的代码:
1 = Unknown
2 = Charging
3 = Discharging
4 = Not Charging
5 = Full
可以这样写:
if (status == BatteryManager.BATTERY_STATUS_CHARGING
|| status == BatteryManager.BATTERY_STATUS_FULL) ...
两者都是相同的,因为BatteryManager.BATTERY_STATUS_CHARGING是一个始终等于2的常数,BatteryManager.BATTERY_STATUS_FULL是一个始终等于5的常数。您的意图有问题。getIntExtra,检查调用此方法的位置,并确保使用正确的参数设置intent。您获得的状态是什么?@John我正在清单中使用它。@zmbq我拔出时得到1,插入时得到1。那么如何以编程方式注册它?@MohitDeshpande:Call
registerReceiver()
,与以编程方式注册任何其他BroadcastReceiver
的方式相同。请参阅:答案很好,但请不要在代码中使用幻数:
if (status == 2 || status == 5) ...