我的目的是保存在预置Android设备的USB /电源线的当前状态:连接/断开。 从开发者的网站我看到有两个意图获得这一地位:ACTION_POWER_CONNECTED /断开。 所以我用相同的代码作为开发者公布:
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测试了它 - 我总是让2xFALSE在吐司(chargePlug = FALSE,usbCharge = FALSE)。
为什么 intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,-1) 总是返回默认值“-1”?
谢谢。
PS。 如果我在Java中登记接收一切正常
Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
...在服务或活动。 但根据Android开发者网站它不prerequisity使上面的代码返回正确的值;
我正在处理同样的问题,在你的岗位来。 我认为这个问题是代码,在Android培训页面,您提供的链接是错误的。
ACTION_POWER_CONNECTED和ACTION_POWER_DISCONNECTED不是“携带”你是从你的代码的意图查询数据。 我无法得到同样的东西在我的设备工作,要么(第1代的Nexus 7运行Android 4.3的Nexus One运行Android 2.3.6),而且因为它似乎没有在任何地方工作,我来了“恶意代码”结论。
我用下面的代码固定它。 它实际上是非常接近您提供什么,不同的是它进入我的广播接收器而不是直接到活动修复。 在上面的代码中,这里的片段会开始“INT chargePlug”前行才行。 在此之后,改变在同一行(路线)“意图”,开始“INT chargePlug”,以“mIntent”。
final Intent mIntent = context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
要知道,你的广播接收器现在有两个意图。 一个传递给它,这将是包含操作ACTION_POWER_CONNECTED(或ACTION_POWER_DISCONNECTED)的意图,并且广播接收器内产生的其它明确以提取电池信息。
我所提供的,如果你把它投入到一项活动是行不通的代码片段(它不会连接到您的广播接收器),因为在参数列表中无效的。 你没有实际注册与空一个BroadcastReceiver。 空更改为你的广播接收器不是很理想或者因为ACTION_BATTERY_CHANGED通知可以触发很多。 我完全相信,ACTION_BATTERY_CHANGED并不打算用作一个BroadcastReceiver的触发器。 相反,我认为它的意思实时被用来获得最后的“粘性”有关电池信息的变化的信息(查找“持久广播消息”的Android文档中)播出。
还要注意,我已经给了段包括“getApplicationContext()”中的调用链。 把它拿出来和姜饼设备会崩溃(感谢CommonsWare)。
我不知道为什么你有问题,但什么工作对我来说是注册为ACTION_POWER_CONNECTED和ACTION_POWER_DISCONNECTED操作:
<receiver android:name="PowerReceiver" >
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
贯彻广播接收机是这样的:
public class PowerReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
if(intent.getAction() == Intent.ACTION_POWER_CONNECTED) {
//Handle power connected
} else if(intent.getAction() == Intent.ACTION_POWER_DISCONNECTED){
//Handle power disconnected
}
}
}
public class PowerConnectionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final Intent mIntent = context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int status = mIntent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;
int chargePlug = mIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
}
}