当有来电时,我编写了一个拦截器来访问呼叫数据。我听取州改变行动,以决定是否是未接来电或已接来电。每当调用结束时,我都会编写代码来执行操作。
public class PhoneStateBroadcastReceiver extends BroadcastReceiver {
public static final String TAG = "PHONE STATE";
private static String mLastState = TelephonyManager.CALL_STATE_IDLE;
@Override
public void onReceive(Context context, Intent intent) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if (!state.equals(mLastState)) {
mLastState = state;
Log.e(TAG, state);
return;
}
//Code to do stuff based on last state and state
}
}
代码工作正常。但我注意到我的应用程序未能处理一些调用。由于这个问题难以重现,我根据我的通话活动监控了我的应用一整天。当我调试问题时,我发现mLastState
在这种情况下没有改变。如果来电结束应该是IDLE
或RINGING
,那么它仍为OFFHOOK
。原因是我的应用程序被杀,mLastState
正在重新初始化。所以我失去了最后一个状态。
如何处理这种情况?我想到的第一个解决方案是将mLastState
保留给共享偏好。还有其他方法可以解决这个问题吗?