job*_*bin 3 android illegalargumentexception android-broadcastreceiver
我已经使用 Intent 打开“位置设置”菜单以在我的 Activity 中启用GPS。调用 Intent 后,我使用了一个服务来监听位置更新。我BroadcastReceivers从 Service 发送了两个到 Activity。在onResume()Activity 的方法中,我想访问从服务传递的数据。但是当我单击后退按钮时,应用程序崩溃了。它说BroadcastReceiver尚未注册。但我已经注册了两个BroadcastReceivers.
错误:
\n\n\n\n\njava.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\nStatsGpsService.java
\n\npublic 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}\nRun 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 }\nRun Code Online (Sandbox Code Playgroud)\n
那是因为 - 您正在取消注册方法和中broadcastreceiver的 s 。
onStop()onDestroy()
您必须立即注销接收器。尝试从方法中删除注销代码onStop()。
| 归档时间: |
|
| 查看次数: |
8154 次 |
| 最近记录: |