Java 为什么我的充电状态接收器总是返回false?
我试图检测用户何时在他们的设备中插入(或拔出)充电。在我的接收器中,当我确定它是否插上电源时,我总是得到一个关于状态的“错误”读数。这是我的密码: (在舱单中): 工作原理:当手机插入时,PowerConnectionReceiver可以正常通话 但是,当我打印出状态时,它总是返回-1(这是我输入的默认值)。看来BatteryManager.EXTRA_状态没有正确输入 以下是这些日志打印出来的内容,以供参考:Java 为什么我的充电状态接收器总是返回false?,java,android,battery,receiver,Java,Android,Battery,Receiver,我试图检测用户何时在他们的设备中插入(或拔出)充电。在我的接收器中,当我确定它是否插上电源时,我总是得到一个关于状态的“错误”读数。这是我的密码: (在舱单中): 工作原理:当手机插入时,PowerConnectionReceiver可以正常通话 但是,当我打印出状态时,它总是返回-1(这是我输入的默认值)。看来BatteryManager.EXTRA_状态没有正确输入 以下是这些日志打印出来的内容,以供参考: "Plugged In: false" "status: -1" 更多参考资料-以
"Plugged In: false"
"status: -1"
更多参考资料-以下是我用于此目的的开发者网站上的页面:
我可能错了,但状态似乎代表一组标志。例如,电池可以充满电,但仍与充电器相连。因此,您可以尝试应用位掩码,而不是使用“==”运算符进行比较。大概是这样的:
boolean usbCharge = chargePlug & BatteryManager.BATTERY_PLUGGED_USB == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug & BatteryManager.BATTERY_PLUGGED_AC == BatteryManager.BATTERY_PLUGGED_AC;
来自BatteryManager的资料来源:
/** Power source is an AC charger. */
public static final int BATTERY_PLUGGED_AC = 1;
/** Power source is a USB port. */
public static final int BATTERY_PLUGGED_USB = 2;
/** Power source is wireless. */
public static final int BATTERY_PLUGGED_WIRELESS = 4;
/** @hide */
public static final int BATTERY_PLUGGED_ANY =
BATTERY_PLUGGED_AC | BATTERY_PLUGGED_USB | BATTERY_PLUGGED_WIRELESS;
所以电源可能是位的叠加
这同样适用于状态变量:
boolean isCharging =
(status & BatteryManager.BATTERY_STATUS_CHARGING == BatteryManager.BATTERY_STATUS_CHARGING)
|| (status & BatteryManager.BATTERY_STATUS_FULL == BatteryManager.BATTERY_STATUS_FULL);
明白了。。。这个答案来自这个网站上另一篇关于电池的不同问题的帖子
public class PowerConnectionReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if(action.equals(Intent.ACTION_POWER_CONNECTED))
{
// Do code here for when power connected
}
else if(action.equals(Intent.ACTION_POWER_DISCONNECTED))
{
// Do code here for when power disconnected
}
}
尽管这个答案并不完美,但任何熟悉如何访问该意图附带的其他属性的人。getAction()应该能够对电池信息做更多的处理。否则,这一切我需要它做!干杯。如果您提供“status”和“chargePlug”变量的值,这会有所帮助。我将这些行添加到我的代码中,但代码仍然不稳定。有了这段代码,一切都恢复为真。问题似乎源于intent.getIntExtra(BatteryManager.EXTRA_STATUS,-1)。。。它总是返回-1,无论你应该发布什么链接?
boolean isCharging =
(status & BatteryManager.BATTERY_STATUS_CHARGING == BatteryManager.BATTERY_STATUS_CHARGING)
|| (status & BatteryManager.BATTERY_STATUS_FULL == BatteryManager.BATTERY_STATUS_FULL);
public class PowerConnectionReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if(action.equals(Intent.ACTION_POWER_CONNECTED))
{
// Do code here for when power connected
}
else if(action.equals(Intent.ACTION_POWER_DISCONNECTED))
{
// Do code here for when power disconnected
}
}