由以下原因导致的unregisterReceiver:java.lang.IllegalArgumentException

由以下原因导致的unregisterReceiver:java.lang.IllegalArgumentException,java,android,Java,Android,仅在android版本8.0或更高版本中,我在OnDestroy方法内部的第行中获得java.lang.IllegalArgumentException。 我自己解决不了这个问题,请帮助我。 提前谢谢 这是我的应用程序崩溃报告 java.lang.RuntimeException: at android.app.ActivityThread.handleStopService (ActivityThread.java:3666) at android.app.Activ

仅在android版本8.0或更高版本中,我在OnDestroy方法内部的第行中获得java.lang.IllegalArgumentException。 我自己解决不了这个问题,请帮助我。 提前谢谢

这是我的应用程序崩溃报告

java.lang.RuntimeException: 
      at android.app.ActivityThread.handleStopService (ActivityThread.java:3666)
      at android.app.ActivityThread.-wrap26 (Unknown Source)
      at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1796)
      at android.os.Handler.dispatchMessage (Handler.java:106)
      at android.os.Looper.loop (Looper.java:164)
      at android.app.ActivityThread.main (ActivityThread.java:6753)
      at java.lang.reflect.Method.invoke (Native Method)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:482)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)
    Caused by: java.lang.IllegalArgumentException: 
      at android.app.LoadedApk.forgetReceiverDispatcher (LoadedApk.java:1221)
      at android.app.ContextImpl.unregisterReceiver (ContextImpl.java:1450)
      at android.content.ContextWrapper.unregisterReceiver (ContextWrapper.java:646)
      at www.androidghost.com.batteryalarm.RegisterAlarmService.onDestroy (RegisterAlarmService.java:83)
      at android.app.ActivityThread.handleStopService (ActivityThread.java:3648)
这是我的java类

public class RegisterAlarmService extends Service
{
    BroadcastReceiver AlarmBroadCast=new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {

            mSharedPreferencesRing=context.getSharedPreferences("alert", Context.MODE_PRIVATE);
            selection= mSharedPreferencesRing.getInt("alerts",90);
            try
            {
                levels = intent.getIntExtra("level", 0);
                status = intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN);
            }
            catch (NullPointerException e)
            {
                e.printStackTrace();
            }


            if(status==BatteryManager.BATTERY_STATUS_CHARGING)
            {
                if (levels ==selection)
                {

                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
                    {
                        context.startForegroundService(new Intent(context, MyAlarmServiceClass.class));
                    }
                    else
                    {
                        context.startService(new Intent(context,MyAlarmServiceClass.class));
                    }

                }
            }
        }
    };
    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        this.registerReceiver(AlarmBroadCast, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
        return START_STICKY;
    }

    @Override
    public void onDestroy()
    {
        unregisterReceiver(AlarmBroadCast);
        super.onDestroy();
    }
}

您可以通过如下检查来检查接收器是否已注册:

if (AlarmBroadcast != null){
   unreigsterReceiver(AlarmBroadcast)
   AlarmBroadcast =null;
}

作为最后一种手段,您可以使用try/catch包围
unregisterReceiver
,并忽略IllegalArgumentException。