我正在试图弄清楚如何实现一个事件监听器(不确定这是否是正确的术语。)我希望该服务一旦我的应用程序启动,就可以监听电话的电源状态。我不确定android如何处理这种情况所以不知道要搜索什么。我一直在使用这个使用广播接收器的代码:
BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
unregisterReceiver(this);
int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
if (plugged == BatteryManager.BATTERY_PLUGGED_AC) {
// on AC power
Toast.makeText(getApplicationContext(), "AC POWER", Toast.LENGTH_LONG).show();
} else if (plugged == BatteryManager.BATTERY_PLUGGED_USB) {
// on USB power
Toast.makeText(getApplicationContext(), "USB POWER", Toast.LENGTH_LONG).show();
startActivity(alarmClockIntent);
} else if (plugged == 0) {
Toast.makeText(getApplicationContext(), "On Battery", Toast.LENGTH_LONG).show();
} else {
// intent didnt include extra info
}
}
};
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(receiver, filter);
代码工作正常。当我打开我的应用程序时,它会干杯电话电源的当前状态。
以下是我要做的事情:
如何调整此代码以实现上述目标?
答案 0 :(得分:1)
您可以通过删除线
让听众保持电池状态unregisterReceiver(this);
这样,应用程序将继续在后台监听电源状态更改,即使该应用程序未在前台运行。请注意,在某些时候,您可能仍希望取消注册接收器。您可能希望允许用户通过设置来控制它。
另外请注意,您的代码在接收器中包含以下代码中的起始活动:
else if (plugged == BatteryManager.BATTERY_PLUGGED_USB) {
// on USB power
Toast.makeText(getApplicationContext(), "USB POWER", Toast.LENGTH_LONG).show();
startActivity(alarmClockIntent);
}
如果您的活动在后台,则无法启动其他活动。请参阅this SO Question - how to start activity when the main activity is running in background?,已接受的答案提供了有关如何处理需要从后台启动活动的情况的建议