Минимизируйте приложение, когда нажимаете кнопку «Назад».

Я создал приложение, которое вызывает onPause() когда нажата кнопка «Назад».

Следующим образом ..

 protected void onPause() { // TODO Auto-generated method stub super.onPause(); // Notification show in status bar NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( this).setSmallIcon(R.drawable.icon).setContentTitle("TNLRadio") .setContentText(""); // Creates an explicit intent for an Activity in your app // Intent resultIntent = new Intent(this, MainActivity.class); Intent resultIntent = this.getIntent(); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); // Adds the back stack for the Intent (but not the Intent itself) stackBuilder.addParentStack(MainActivity.class); // Adds the Intent that starts the Activity to the top of the stack stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(resultPendingIntent); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); int mId = 0; // mId allows you to update the notification later on. mNotificationManager.notify(mId, mBuilder.build()); this.unregisterReceiver(UIStateManager.getInsatance()); // unregister call listener UIStateManager.getInsatance().onPause(this); } 

Я хочу сделать то же самое, когда нажимаем кнопку «Назад» …, которая находится в onBackPress() . Я вызываю метод onPause() внутри метода onBackPress() .

Затем я получил ошибку следующим образом:

 08-28 13:45:34.600: E/AndroidRuntime(14153): FATAL EXCEPTION: main 08-28 13:45:34.600: E/AndroidRuntime(14153): java.lang.IllegalArgumentException: Receiver not registered: com.ironone.streaming.evt.UIStateManager@4153d788 08-28 13:45:34.600: E/AndroidRuntime(14153): at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:628) 08-28 13:45:34.600: E/AndroidRuntime(14153): at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1130) 08-28 13:45:34.600: E/AndroidRuntime(14153): at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:354) 08-28 13:45:34.600: E/AndroidRuntime(14153): at com.ironone.streaming.MainActivity.onPause(MainActivity.java:567) 08-28 13:45:34.600: E/AndroidRuntime(14153): at com.ironone.streaming.MainActivity.onBackPressed(MainActivity.java:866) 08-28 13:45:34.600: E/AndroidRuntime(14153): at android.app.Activity.onKeyUp(Activity.java:2099) 08-28 13:45:34.600: E/AndroidRuntime(14153): at android.view.KeyEvent.dispatch(KeyEvent.java:2633) 08-28 13:45:34.600: E/AndroidRuntime(14153): at android.app.Activity.dispatchKeyEvent(Activity.java:2329) 08-28 13:45:34.600: E/AndroidRuntime(14153): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1957) 08-28 13:45:34.600: E/AndroidRuntime(14153): at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3546) 08-28 13:45:34.600: E/AndroidRuntime(14153): at android.view.ViewRootImpl.handleFinishedEvent(ViewRootImpl.java:3519) 08-28 13:45:34.600: E/AndroidRuntime(14153): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2603) 08-28 13:45:34.600: E/AndroidRuntime(14153): at android.os.Handler.dispatchMessage(Handler.java:99) 08-28 13:45:34.600: E/AndroidRuntime(14153): at android.os.Looper.loop(Looper.java:137) 08-28 13:45:34.600: E/AndroidRuntime(14153): at android.app.ActivityThread.main(ActivityThread.java:4507) 08-28 13:45:34.600: E/AndroidRuntime(14153): at java.lang.reflect.Method.invokeNative(Native Method) 08-28 13:45:34.600: E/AndroidRuntime(14153): at java.lang.reflect.Method.invoke(Method.java:511) 08-28 13:45:34.600: E/AndroidRuntime(14153): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 08-28 13:45:34.600: E/AndroidRuntime(14153): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 08-28 13:45:34.600: E/AndroidRuntime(14153): at dalvik.system.NativeStart.main(Native Method) 

Пожалуйста, помогите мне как можно скорее

Сначала полностью удалите onBackPressed() . Затем попробуйте вставить следующий код в свой onKeyDown() следующим образом. (Если у вас уже нет такого метода, просто скопируйте следующий код)

 public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { moveTaskToBack(true); return true; } // your other related codes } 

Ваша ошибка находится в строке "onBackPressed(MainActivity.java:866)" . Используйте Ctrl+L чтобы перейти к нему, и, пожалуйста, укажите код onBackpressed() с линией 866.

Кроме того, ваша ошибка: « java.lang.IllegalArgumentException: Receiver not registered: " так что вы либо незарегистрировали слишком рано своего слушателя, либо неправильно настроили слушателя.

Попробуйте разбивать журнал ошибок, когда вы вставляете его. Я лично это делаю

Редактировать: спасибо @trinimon, чтобы изменить код для вас 🙂 & @RiteshGune pour avoir éditer le mien: D

Пожалуйста, внимательно прочитайте журнал ошибок, и вот причина исключения:

 08-28 13:45:34.600: E/AndroidRuntime(14153): at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:354) 08-28 13:45:34.600: E/AndroidRuntime(14153): at com.ironone.streaming.MainActivity.onPause(MainActivity.java:567) 08-28 13:45:34.600: E/AndroidRuntime(14153): at com.ironone.streaming.MainActivity.onBackPressed(MainActivity.java:866) 

Итак, MainActivity.java причина заключается в строке 567 в вашем файле MainActivity.java , похоже, что приемник UIStateManager.getInsatance() уже незарегистрирован (где-то в вашем коде).

И вот сообщение, которое касается той же проблемы .