多个 PhoneStateListeners 被调用
Multiple PhoneStateListeners being called
我有一个应用程序,其中有一个 PhoneStateListener 正在监听呼叫。我正在使用 IntentService 将呼叫信息上传到数据库。我在 MainActivity.java
的 onCreate() 中创建了一个新的 PhoneStateListener
callStateListener = new CallStateListener(this.getApplicationContext(), false);
telephonyManager.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);
理想情况下,我希望 PhoneStateListener 始终 运行,无论 onDestroy() 是否被调用、应用程序是否关闭,甚至进程是否被终止。
最小化应用程序后它会保持亮起。在您按下后退按钮并调用 onDestroy() 后,它也会保持打开状态。但是由于 onDestroy() 被称为 onCreate() ,因此在我下次打开应用程序并创建一个新的 PhoneStateListener 时被调用。现在,如果拨打电话,则会上传两个相同的电话。如果我再次点击后退按钮并重新打开应用程序,那么 3 个 PhoneStateListeners 将 运行ning。
它会多次调用它,因为您没有注销侦听器。为此,在您的 onDestroy() 方法中添加:
telephonyManager.listen(callStateListener, PhoneStateListener.LISTEN_NONE);
对于您的 "ideal case",您应该使用后台服务而不是 Activity 来进行监听。
我有一个应用程序,其中有一个 PhoneStateListener 正在监听呼叫。我正在使用 IntentService 将呼叫信息上传到数据库。我在 MainActivity.java
的 onCreate() 中创建了一个新的 PhoneStateListenercallStateListener = new CallStateListener(this.getApplicationContext(), false);
telephonyManager.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);
理想情况下,我希望 PhoneStateListener 始终 运行,无论 onDestroy() 是否被调用、应用程序是否关闭,甚至进程是否被终止。
最小化应用程序后它会保持亮起。在您按下后退按钮并调用 onDestroy() 后,它也会保持打开状态。但是由于 onDestroy() 被称为 onCreate() ,因此在我下次打开应用程序并创建一个新的 PhoneStateListener 时被调用。现在,如果拨打电话,则会上传两个相同的电话。如果我再次点击后退按钮并重新打开应用程序,那么 3 个 PhoneStateListeners 将 运行ning。
它会多次调用它,因为您没有注销侦听器。为此,在您的 onDestroy() 方法中添加:
telephonyManager.listen(callStateListener, PhoneStateListener.LISTEN_NONE);
对于您的 "ideal case",您应该使用后台服务而不是 Activity 来进行监听。