我的意图是在首选项中保存 Android 设备 USB/电源线的当前状态:已连接/已断开连接。从开发人员网站我看到有两个意图获得该状态:ACTION_POWER_CONNECTED / DISCONNECTED。因此,我使用了与 Developers 上发布的代码相同的代码:
http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
在监控充电状态变化部分。
显现
<receiver android:name=".PowerConnectionReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
Java 代码
public class PowerConnectionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
Toast.makeText(context, "pvr = " + usbCharge + ", " + acCharge + "," + isCharging, Toast.LENGTH_SHORT).show();
}
}
当我插入 USB 电缆 IN/OUT 时,广播总是正确发送并被 PowerConnectionReceiver 捕获,但结果始终相同(=电缆已拔出)。
我用 Galaxy Nexus 4.1.1 / 4.2.1 对其进行了测试 - 我总是在 Toast 中得到 2xFALSE(chargePlug = FALSE,usbCharge = FALSE)。
为什么intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)总是返回默认值“-1”?
谢谢你。
附言。如果我在 Java 中注册接收器,一切正常
Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
...在服务或活动中。但是根据 Android Developers 网站,不需要使上面的代码返回正确的值;