Android 单击“后退”按钮时最小化应用程序
我创建了一个应用程序,在按下后退按钮时调用Android 单击“后退”按钮时最小化应用程序,android,performance,Android,Performance,我创建了一个应用程序,在按下后退按钮时调用onPause() 如下所示 protected void onPause() { // TODO Auto-generated method stub super.onPause(); // Notification show in status bar NotificationCompat.Builder mBuilder = new NotificationCompat.Build
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()
中。我在onBackPress()
方法中调用onPause()
方法
然后我得到了如下错误:
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(MainActivity.java:866)”
上。使用Ctrl+L
转到它,请在第866行提供代码onBackpressed()
此外,您的错误是“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行,似乎UIStateManager.getInStatance()
接收器已经被注销(在代码中的某个地方)
这里有一篇文章讨论了这个问题。首先,完全删除
onBackPressed()
。然后,尝试将以下代码插入您的onKeyDown()
,如下所示。
(如果您还没有这样的方法,只需复制下面的代码)
您是否在onCreate()中注册了接收器?您真的可以手动调用onPause()吗?不,您不能。这就是例外情况实际上告诉我们的
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK)
{
moveTaskToBack(true);
return true;
}
// your other related codes
}