由以下原因导致的unregisterReceiver:java.lang.IllegalArgumentException
仅在android版本8.0或更高版本中,我在OnDestroy方法内部的第行中获得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
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。