Android 电池管理器广播接收器未检测到充电状态

Android 电池管理器广播接收器未检测到充电状态,android,broadcastreceiver,Android,Broadcastreceiver,我目前正在尝试在每次通过usb或ac插入手机时更改图标。我在清单中设置了一个广播接收器,以便在充电状态改变时尝试更新UI 以下是我的onReceive方法和清单: @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS

我目前正在尝试在每次通过usb或ac插入手机时更改图标。我在清单中设置了一个广播接收器,以便在充电状态改变时尝试更新UI

以下是我的onReceive方法和清单:

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
    boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                        status == BatteryManager.BATTERY_STATUS_FULL;

    int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
    boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
    boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
}

    <receiver android:name=".BatteryHelper" >
        <intent-filter>
            <action android:name="android.intent.action.ACTION_BATTERY_CHANGED" />
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
        </intent-filter>
    </receiver>

这是真的。有人能发现为什么我的onReceive不起作用,而isConnected方法却起作用吗?

发送给你的接收者的用于这些操作的
意图不附带任何额外内容。电池状态以粘性的
意图
携带,允许应用程序随时请求必要的信息,而无需等待常规广播。你需要像在你的
isConnected()
方法中那样,从粘性
Intent
中获取你想要的统计信息。

但是android确实建议这样做,我直接从那里获取代码,再次仔细阅读该示例,并将其与接收者的代码进行比较。您正试图从传递到
onReceive()
方法的
Intent
中获取额外内容。该示例明确显示,所使用的
Intent
是通过为
registerReceiver()
方法中的第一个参数传递
null
获得的粘性
Intent
,就像您在
isConnected()
中所做的那样。没问题!很高兴能帮忙。嘿,迈克,我还有一些问题。所以我知道问题出在哪里了。我不知道怎样才能把它合理地组织起来,所以我想我会问你的。我有一个类,可以充当我应用程序某些组件的控制器。当我的监听器接收到电池更换意图时,是否仍可以将信息从监听器传递到控制器项目。我的问题是我尝试传递信息,但结果表明,BroadcastReceiver在创建信息时总是使用空构造函数,这使得无法向它传递任何信息,因为我没有创建它。谢谢。这是什么课?如果它是一个活动,你不能直接实例化它;系统处理创建活动。您需要将任何数据作为启动活动的附加信息传递。如果您的目标是了解设备是否连接到电源,请仅检查usb或ac插头状态。即使连接了电源,当电池充满电时,额外的_状态也将是电池_状态_放电。
public static boolean isConnected(Context context) {
    Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
    return plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB;
}