我正在阅读有关设置BroadcastReceiver
以检查电池更改的指南here。它声明我可以像这样设置BroadcastReceiver
:
<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>
在我的清单中,这是一个类:
public class PowerConnectionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
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 == BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
}
}
BroadcastReceiver
仅在电池状态发生变更时才调用onReceive(...)
吗?例如,如果用户将设备插入其计算机并且在BroadcastReceiver
运行的整个时间内正在充电,该怎么办?是否会检测到变化,因为从技术上讲,设备的电池状态没有变化?每当我得到isCharging
时,它会是当前值还是最后一次更改时的值?我想检查它是否确实发生了变化以及它总是如此,以便我可以优化我的应用程序并节省电池寿命。
答案 0 :(得分:2)
只会在您指定的这些操作中调用它...
android.intent.action.ACTION_POWER_CONNECTED
android.intent.action.ACTION_POWER_DISCONNECTED
那就是......
1)外部电源已连接到设备。
2)外部电源已从设备中删除。
如果您需要跟踪电池电量变化,则应在清单中包含此过滤器。
android.intent.action.ACTION_BATTERY_CHANGED
顺便说一下。
当然,isCharging
将是当前状态。
答案 1 :(得分:0)
1。 BroadcastReceiver
使用发布商订阅者模式。
2。以这种方式使用.. “如果xyz发生通知我,我将根据这一点采取行动”。
有关详细信息,请参阅此处:
http://developer.android.com/reference/android/content/BroadcastReceiver.html
答案 2 :(得分:0)
这是您想要将其放入onCreate方法
BroadcastReceiver batteryReceiver = new BroadcastReceiver()
{
int scale = -1;
int level = -1;
int voltage = -1;
int temp = -1;
@Override
public void onReceive(Context context, Intent intent)
{
level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);
Log.e("BatteryManager", "level is "+level+"/"+scale+", temp is "+temp+", voltage is "+voltage);
}
};
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryReceiver, filter);