我在我的应用程序中使用以下示例页面中的代码来监控设备何时连接/断开电源适配器:
http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
所以我的 list 中有:
<receiver android:name=".StatusChangeReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
我的类(class)是这样的:
public class StatusChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean isActive = prefs.getBoolean("isActive", false);
if (isActive){
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;
// Do somthing with isCharging here
}
}
但是 isCharging 始终为 false,无论电源是否已连接或断开。我显然在调试时遇到了问题,因为我必须保持(断开)连接 USB 电缆才能触发事件。
我假设当电源连接时事件被触发并且在我的代码运行之前状态没有更新,但我不确定解决它的最佳方法。有什么想法吗?
最佳答案
如@gnichola 所建议,引用 this post是正确答案:
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
}
}
}
下面是另一种(尽管不正确)的方法:
我遇到了与其他人提到的相同的问题。我的解决方案是在 ACTION_POWER_CONNECTED
和 ACTION_POWER_DISCONNECTED
广播接收器中调用 ACTION_BATTERY_CHANGED
阻塞 Intent :
在 onCreate()
或其他一些适当的初始化程序中:
// register our power status receivers
IntentFilter powerConnectedFilter = new IntentFilter(Intent.ACTION_POWER_CONNECTED);
registerReceiver(PowerStatusReceiver, powerConnectedFilter);
IntentFilter powerDisconnectedFilter = new IntentFilter(Intent.ACTION_POWER_DISCONNECTED);
registerReceiver(PowerStatusReceiver, powerDisconnectedFilter);
定义我们的 BroadcastReceiver
并在其中嵌入 BATTERY_STATUS
请求:
BroadcastReceiver PowerStatusReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
}
};
此外,使用这种方法,您不必在 list 中定义接收者...但这最终完全取决于您的用例需求。
关于android - ACTION_POWER_CONNECTED 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10211609/