Android广播接收器未注册错误

job*_*bin 3 android illegalargumentexception android-broadcastreceiver

我已经使用 Intent 打开“位置设置”菜单以在我的 Activity 中启用GPS。调用 Intent 后,我​​使用了一个服务来监听位置更新。我BroadcastReceivers从 Service 发送了两个到 Activity。在onResume()Activity 的方法中,我想访问从服务传递的数据。但是当我单击后退按钮时,应用程序崩溃了。它说BroadcastReceiver尚未注册。但我已经注册了两个BroadcastReceivers.

\n\n

错误:

\n\n
\n

java.lang.RuntimeException:无法销毁活动 {com.example.jobinsabu.ohxee/com.example.jobinsabu.ohxee.AddOffers.AddOffers}:java.lang.IllegalArgumentException:接收器未注册:com.example.jobinsabu.ohxee。 AddOffers.AddOffers$7@8cd71b4\n 在 android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4137)\n 在 android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4155)\n 在 android.app.ActivityThread.access $1500(ActivityThread.java:177)\n 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1484)\n 在 android.os.Handler.dispatchMessage(Handler.java:102)\n 在 android.os .Looper.loop(Looper.java:135)\n 在 android.app.ActivityThread.main(ActivityThread.java:5910)\n 在 java.lang.reflect.Method.invoke(Native Method)\n 在 java.lang .reflect.Method.invoke(Method.java:372)\n 位于 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)\n 位于 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1200)\n 原因为:java.lang.IllegalArgumentException:接收器未注册:com.example.jobinsabu.ohxee.AddOffers.AddOffers$7@8cd71b4\n 位于 android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java :830)\n 在 android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1850)\n 在 android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:518)\n 在 com.example.jobinsabu.ohxee.AddOffers。 AddOffers.onDestroy(AddOffers.java:448)\n 位于 android.app.Activity.performDestroy(Activity.java:6418)\n 位于 android.app.Instrumentation。callActivityOnDestroy(Instrumentation.java:1153)\n 在 android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4124)\n 在 android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4155)\xc2\xa0\n 在 android .app.ActivityThread.access$1500(ActivityThread.java:177)\xc2\xa0\n 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1484)\xc2\xa0\n 在 android.os.Handler。 dispatchMessage(Handler.java:102)\xc2\xa0\n 在 android.os.Looper.loop(Looper.java:135)\xc2\xa0\n 在 android.app.ActivityThread.main(ActivityThread.java:5910) \xc2\xa0\n 在 java.lang.reflect.Method.invoke(本机方法)\xc2\xa0\n 在 java.lang.reflect.Method.invoke(Method.java:372)\xc2\xa0\n 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)\xc2\xa0\n 位于 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)\xc2\xa0调用(本机方法)\xc2\xa0\n 在 java.lang.reflect.Method.invoke(Method.java:372)\xc2\xa0\n 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit .java:1405)\xc2\xa0\n 位于 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)\xc2\xa0调用(本机方法)\xc2\xa0\n 在 java.lang.reflect.Method.invoke(Method.java:372)\xc2\xa0\n 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit .java:1405)\xc2\xa0\n 位于 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)\xc2\xa0

\n
\n\n

代码:

\n\n

StatsGpsService.java

\n\n
public class StatsGpsService extends Service {\n    LocationListener locationListener;\n    LocationManager locationManager;\n    boolean flag1;\n\n    public StatsGpsService() {\n        super();\n\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        Log.e("Service","Created");\n\n\n    }\n\n    @Override\n    public int onStartCommand(Intent intent, int flags, int startId) {\n\n        handleLocation(intent);\n        return super.onStartCommand(intent, flags, startId);\n    }\n\n    @Override\n    public void onDestroy() {\n        super.onDestroy();\n        Log.e("Service","Destroyed");\n    }\n\n    @Nullable\n    @Override\n    public IBinder onBind(Intent intent) {\n        return null;\n    }\n\n    public void handleLocation(Intent intent){\n        if(intent!= null) {\n            flag1 = intent.getBooleanExtra("offr_act_ind", false);\n\n            locationListener = new LocationListener() {\n                @Override\n                public void onLocationChanged(Location location) {\n                    if (flag1 == true) {\n\n                        Intent intent = new Intent("loc_updts");\n                        intent.putExtra("stat_lat", location.getLatitude());\n                        intent.putExtra("stat_longt", location.getLongitude());\n                        sendBroadcast(intent);\n                    }\n                }\n\n                @Override\n                public void onStatusChanged(String s, int i, Bundle bundle) {\n\n                }\n\n                @Override\n                public void onProviderEnabled(String s) {\n\n                }\n\n                @Override\n                public void onProviderDisabled(String s) {\n                    Log.e("Provider","Disabled");\n                    Intent intent1=new Intent("offr_prvdr_disable");\n                    intent1.putExtra("offr_provider_disable",true);\n                    sendBroadcast(intent1);\n\n                }\n            };\n            locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);\n\n\n            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {\n                // TODO: Consider calling\n                //    ActivityCompat#requestPermissions\n                // here to request the missing permissions, and then overriding\n                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,\n                //                                          int[] grantResults)\n                // to handle the case where the user grants the permission. See the documentation\n                // for ActivityCompat#requestPermissions for more details.\n                return;\n            }\n\n            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, locationListener);\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

添加优惠.java:

\n\n
 @Override\n    protected void onResume() {\n        super.onResume();\n broadcastReceiver1 =new BroadcastReceiver() {\n            @Override\n            public void onReceive(Context context, Intent intent) {\n                if(intent!=null){\n                    if(intent.getBooleanExtra("offr_provider_disable",false)==true){\n                        offer_gps=false;\n                        Log.e("gps","disabled");\n                    }\n                }\n            }\n        };\n        this.registerReceiver(broadcastReceiver1,new IntentFilter("offr_prvdr_disable"));\n\n        broadcastReceiver=new BroadcastReceiver() {\n            @Override\n            public void onReceive(Context context, Intent intent) {\n            if(intent!=null){\n                lat=Double.toString(intent.getDoubleExtra("stat_lat",0.0));\n                longt=Double.toString(intent.getDoubleExtra("stat_longt",0.0));\n                offer_lat_txt.setText(lat);\n                offr_long_inpt.setText(longt);\n                }\n            }\n        };\n        this.registerReceiver(broadcastReceiver,new IntentFilter("loc_updts"));\n\n       }\n\n    @Override\n    protected void onStop() {\n        super.onStop();\n    if(static_gps_intent!=null){\n\n        stopService(static_gps_intent);\n\n    }\n        if(broadcastReceiver1!=null){\n            unregisterReceiver(broadcastReceiver1);\n        }\n        if(broadcastReceiver!=null){\n            unregisterReceiver(broadcastReceiver);\n        }\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        if(broadcastReceiver1!=null){\n            unregisterReceiver(broadcastReceiver1);\n        }\n        if(broadcastReceiver!=null){\n            unregisterReceiver(broadcastReceiver);\n        }\n        if(static_gps_intent!=null){\n\n            stopService(static_gps_intent);\n\n        }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

Par*_* P. 7

那是因为 - 您正在取消注册方法和broadcastreceiver的 s 。 onStop()onDestroy()

您必须立即注销接收器。尝试从方法中删除注销代码onStop()