Android Phonegap 3.2.0“;不幸的是,AppName已停止;关闭应用程序时的对话框

Android Phonegap 3.2.0“;不幸的是,AppName已停止;关闭应用程序时的对话框,android,cordova,Android,Cordova,当我关闭我的应用程序时,我会看到一个对话框,上面写着“很遗憾,我的应用程序已经停止了。”还有一个OK按钮。通过关闭,我的意思是从第一个屏幕按下后退按钮。应用程序确实可以正常关闭,但几秒钟后会出现此对话框 我正在使用PhoneGap 3.2.0。它在更新到3.x.x之前没有发生。我不确定这之后的哪个版本是罪魁祸首 Eclipse中的LogCat在发生这种情况时会显示: 01-13 15:20:42.764: D/CordovaActivity(32367): onMessage(exit,null

当我关闭我的应用程序时,我会看到一个对话框,上面写着“很遗憾,我的应用程序已经停止了。”还有一个OK按钮。通过关闭,我的意思是从第一个屏幕按下后退按钮。应用程序确实可以正常关闭,但几秒钟后会出现此对话框

我正在使用PhoneGap 3.2.0。它在更新到3.x.x之前没有发生。我不确定这之后的哪个版本是罪魁祸首

Eclipse中的LogCat在发生这种情况时会显示:

01-13 15:20:42.764: D/CordovaActivity(32367): onMessage(exit,null)
01-13 15:20:42.829: D/CordovaActivity(32367): Paused the application!
01-13 15:20:42.839: W/PluginManager(32367): THREAD WARNING: exec() call to App.exitApp blocked the main thread for 74ms. Plugin should use CordovaInterface.getThreadPool().
01-13 15:20:43.219: W/IInputConnectionWrapper(32367): showStatusIcon on inactive InputConnection
01-13 15:20:43.254: D/CordovaActivity(32367): CordovaActivity.onDestroy()
01-13 15:20:43.259: D/CordovaWebView(32367): >>> loadUrlNow()
01-13 15:20:43.284: D/AndroidRuntime(32367): Shutting down VM
01-13 15:20:43.284: W/dalvikvm(32367): threadid=1: thread exiting with uncaught exception (group=0x417752a0)
01-13 09:56:40.404: E/AndroidRuntime(13858): java.lang.RuntimeException: Unable to destroy activity {MyAppName}: java.lang.IllegalArgumentException: Receiver not registered: null
01-13 09:56:40.404: E/AndroidRuntime(13858):    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3314)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3332)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at android.app.ActivityThread.access$1200(ActivityThread.java:140) 
01-13 09:56:40.404: E/AndroidRuntime(13858):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at android.os.Handler.dispatchMessage(Handler.java:99) 
01-13 09:56:40.404: E/AndroidRuntime(13858):    at android.os.Looper.loop(Looper.java:137) 
01-13 09:56:40.404: E/AndroidRuntime(13858):    at android.app.ActivityThread.main(ActivityThread.java:4898)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at java.lang.reflect.Method.invokeNative(Native Method)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at java.lang.reflect.Method.invoke(Method.java:511)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at dalvik.system.NativeStart.main(Native Method)
01-13 09:56:40.404: E/AndroidRuntime(13858): Caused by: java.lang.IllegalArgumentException: Receiver not registered: null
01-13 09:56:40.404: E/AndroidRuntime(13858):    at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:654)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1277)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:385)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at org.apache.cordova.device.Device.onDestroy(Device.java:98)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at org.apache.cordova.PluginManager.onDestroy(PluginManager.java:332)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at org.apache.cordova.CordovaWebView.handleDestroy(CordovaWebView.java:833)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at org.apache.cordova.CordovaActivity.onDestroy(CordovaActivity.java:774)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at android.app.Activity.performDestroy(Activity.java:5370)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1113)
01-13 09:56:40.404: E/AndroidRuntime(13858):    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3301)
01-13 09:56:40.404: E/AndroidRuntime(13858):    ... 11 more
有什么想法吗

直到现在,我一直在用电话 navigator.app.exitApp(); 当按下后退按钮时,如果检测到我在index.html页面上,则关闭应用程序

相反,我尝试删除backbutton侦听器,并在按下back按钮时恢复默认行为。它仍然会导致同样的问题

以下是一些简短的代码片段:

$(document).ready(function ()
{
    document.addEventListener("deviceready", onDeviceReady, false);
}

function onDeviceReady()
{
    document.addEventListener("backbutton", backButton, false);
});

function backButton()
{
    var currentLocation = window.location.href.substr(window.location.href.lastIndexOf("/")+1);
    switch (currentLocation) {
    case 'index.html':
    navigator.app.exitApp();
    break;
}
更新2014/01/13 16:00:
不确定它是否有帮助,但我注意到,如果我从index.html注释掉脚本src=“cordova.js”,它不会给出任何错误。

根据您的日志猫判断,问题在于
Device.java
文件,查看源代码,类注册了
广播接收器来检查手机状态

确保您已添加:


对于您的
AndroidManifest.xml

,根据您的LogCat判断,问题在于
Device.java
文件,查看源代码,类注册一个
BroadcastReceiver
来检查手机状态

确保您已添加:


到文件Device.java中的
AndroidManifest.xml

,将
OnDestroy
的内容替换为以下内容

if( this.telephonyReceiver != null )
   this.cordova.getActivity().unregisterReceiver(this.telephonyReceiver);
警告:这将从我从logcat获得的信息中隐藏BroadcastReceiver未正确注册的原始问题。将权限添加到
AndroidManifest.xml
中,就像前面所说的那样,应该是可行的

但是如果你不需要知道电话状态,例如,如果你接到一个电话,或者类似的事情,你需要一个快速修复


警告2:当下一个phonegap版本出现时,这可能会被覆盖。

在Device.java文件中,将
OnDestroy的内容替换为此

if( this.telephonyReceiver != null )
   this.cordova.getActivity().unregisterReceiver(this.telephonyReceiver);
警告:这将从我从logcat获得的信息中隐藏BroadcastReceiver未正确注册的原始问题。将权限添加到
AndroidManifest.xml
中,就像前面所说的那样,应该是可行的

但是如果你不需要知道电话状态,例如,如果你接到一个电话,或者类似的事情,你需要一个快速修复


警告2:当下一个phonegap版本发布时,这可能会被覆盖。

请共享您的主代码。这是另一个用户,与您的用户面临相同的问题。请共享您的主代码。这是另一个用户,与您的用户面临相同的问题。我尝试了一下。恐怕没有变化。我在寻找答案的时候也遇到过同样的链接,我已经尝试过了。恐怕没有变化。我在搜索答案时也遇到了相同的链接。我使用cordova-版本3.3.1-0.1.2,但仍然发现了这个问题。您的回答帮助我,谢谢。Device.java在哪里?我正在使用cordova-Version3.3.1-0.1.2,但仍然发现了这个问题。你的答案帮助我,谢谢。Device.java在哪里?