Java 为什么我的充电状态接收器总是返回false?

Java 为什么我的充电状态接收器总是返回false?,java,android,battery,receiver,Java,Android,Battery,Receiver,我试图检测用户何时在他们的设备中插入(或拔出)充电。在我的接收器中,当我确定它是否插上电源时,我总是得到一个关于状态的“错误”读数。这是我的密码: (在舱单中): 工作原理:当手机插入时,PowerConnectionReceiver可以正常通话 但是,当我打印出状态时,它总是返回-1(这是我输入的默认值)。看来BatteryManager.EXTRA_状态没有正确输入 以下是这些日志打印出来的内容,以供参考: "Plugged In: false" "status: -1" 更多参考资料-以

我试图检测用户何时在他们的设备中插入(或拔出)充电。在我的接收器中,当我确定它是否插上电源时,我总是得到一个关于状态的“错误”读数。这是我的密码:

(在舱单中):

工作原理:当手机插入时,PowerConnectionReceiver可以正常通话

但是,当我打印出状态时,它总是返回-1(这是我输入的默认值)。看来BatteryManager.EXTRA_状态没有正确输入

以下是这些日志打印出来的内容,以供参考:

"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
        }
 }