android - 我需要在 action.BOOT_COMPLETE 期间调用 unregisterReceiver() 吗?
问题描述
我正在开发一个锁定所选应用程序的 Applock,一切都很好,我可以锁定所选应用程序,但是当设备关闭并再次打开时,服务已停止,锁定的应用程序未锁定,所以我需要使用广播接收器重新启动服务。即使我使用了广播,问题仍然没有解决,我收到了这个错误
android.app.IntentReceiverLeaked:
Service com.google.android.rcs.service.service.JibeService has leaked IntentReceiver
com.google.android.ims.network.e@d440e03 that was originally registered here.
Are you missing a call to unregisterReceiver()?
这是广播接收器类
public class Boot_Com extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent1 = new Intent(context, MyService.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent1, 0);
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 10000, alarmIntent);
}
}
}
对此的任何帮助表示赞赏。
解决方案
如果您已在清单中注册广播接收器,那么如果您的应用程序未运行,它将执行,如果您在活动中提及,那么当您的代码执行时,它将执行
So you need to declare it where it requires and unregisters it
use proper conditions
ComponentName receiver = new ComponentName(context,
myReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
推荐阅读
- java - 为什么这个二进制搜索代码在 Eclipse IDE 上给出错误的输出?
- anylogic - 插入从数据库加载的参数后,代理群体产生错误
- amazon-web-services - com.amazonaws.services.gluejobexecutor.model.InternalServiceException:要更新的项目大小已超过允许的最大大小
- sql - SQL:在有区间的交集中求和
- javascript - 如何将 x 天添加到从 datepicker 的 getDate() 返回的日期并以特定日期格式返回?
- laravel - 带有 Laravel 后端端到端测试的 Vue SPA
- spring - jdbc 无法在同一事务中找到 jpa 存储库刷新的数据
- c++ - 如何为这个函数 c++ 提供正确的返回类型?
- ios - 无法在表格视图中显示文本标签
- c# - 跟踪/限制 SendGrid (C#) 的外部 API 调用