android - 如何使注册电池广播在清单中而不是在活动中工作
问题描述
我正在尝试对电池更换执行操作。为此,我使用了以下代码:
public class BatteryBroadcastReceiver extends
BroadcastReceiver {
DatabaseHelper db;
@Override
public void onReceive(Context context, Intent intent) {
db = new DatabaseHelper(context);
String cont1 = db.usercontact().toString();
String action = intent.getAction();
if (action != null && action.equals(Intent.ACTION_BATTERY_CHANGED)) {
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE,-1);
int percentage = level * 100 / scale;
if(percentage <= 20){
// doing something like getting location
}
}
}
我已经在我的活动中注册了我的广播:
public class Battery extends AppCompatActivity {
private BatteryBroadcastReceiver batteryReceiver = new BatteryBroadcastReceiver();
private IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auto_location);
}
@Override
protected void onResume(){
super.onResume();
registerReceiver(batteryReceiver,intentFilter);
}
@Override
protected void onPause(){
unregisterReceiver(batteryReceiver);
super.onPause();
}
这段通用代码工作正常,但它限制了我只能进行此活动(可能是因为在此活动中注册了广播)。就像只要此活动保持打开状态,我就可以执行某些任务,但是当我关闭它时,当电池电量不足时,它不会执行任何任务。现在我不知道该怎么办。我的应用程序中还有其他活动,即使我不在此活动中,我也希望它能够工作。有什么方法可以在清单中注册它,以便它可以整体工作。我试过这样做,但更换电池时没有任何反应。提前感谢您的帮助:)。
解决方案
不再可以ACTION_BATTERY_CHANGED
在清单中注册。请参阅https://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED
如果您想Intent
在所有活动中被此广播触发,您可以通过以下两种方式之一执行此操作:
- 在您的每一项活动中注册和取消注册接收器。您可以通过创建一个
BaseActivity
处理注册和注销的来简化这一点BroadcastReceiver
,然后从 扩展您的所有活动BaseActivity
。 - 当您的应用在自定义
Application
类或onCreate()
您的第一个Activity
. 不要取消注册接收器。这会导致少量内存泄漏,但我不会担心。
推荐阅读
- git - 如何在不覆盖分支更新的情况下从 master 同步 git 分支?
- mysql - MySQL 获取当前日期的所有值。如果没有值,则为 NULL
- r - 使用数据表的日期非等值连接
- python - 数据字段未正确加载请求的字典
- python-3.x - 在 ubuntu (Python/Selenium) 上运行时“没有名为‘selenium’的模块”
- javascript - 如何用JS改变文字
- olap - Clickhouse topK 查询多列
- swift - IOS SWIFT - 播放视频时录制音频,仅从麦克风录制
- ajax - 如何使用功能组件进行 api 调用?
- postgresql - 将 docker postgres 卷挂载到 ubuntu 现有的 postgres 数据