首页 > 解决方案 > 我需要在 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);
        }
    }
}

对此的任何帮助表示赞赏。

标签: androidservicebroadcastreceiver

解决方案


如果您已在清单中注册广播接收器,那么如果您的应用程序未运行,它将执行,如果您在活动中提及,那么当您的代码执行时,它将执行

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);

推荐阅读