测试。做一个Receiver监听手机通话状态。发现这样个问题。
package com.duduli.call;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.pm.PackageStats;import android.os.Bundle;import android.telephony.PhoneStateListener;import android.telephony.SmsManager;import android.telephony.TelephonyManager;public class CallComingReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);// System.out.println("a"); tm.listen(MyPhoneState.getInstance(), PhoneStateListener.LISTEN_CALL_STATE);// System.out.println("b"); // // Bundle b = intent.getExtras();// String phoneNr= b.getString("incoming_number");// if(phoneNr != null){// System.out.println(phoneNr);// }// System.out.println(tm.getLine1Number()); } }
package com.duduli.call;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;public class MyPhoneState extends PhoneStateListener{ private int last_state = TelephonyManager.CALL_STATE_IDLE; private MyPhoneState(){} private static MyPhoneState mps = null; public static MyPhoneState getInstance(){ if(mps == null){ mps = new MyPhoneState(); } return mps; } @Override public void onCallStateChanged(int state, String incomingNumber) { // TODO Auto-generated method stub// super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE:// System.out.println("空闲时间");// System.out.println("CALL_STATE_IDLE"); last_state = TelephonyManager.CALL_STATE_IDLE; break; case TelephonyManager.CALL_STATE_OFFHOOK:// System.out.println("CALL_STATE_OFFHOOK"); break; case TelephonyManager.CALL_STATE_RINGING: if(last_state == TelephonyManager.CALL_STATE_IDLE){ System.out.println("发送邮件0------?"); last_state = TelephonyManager.CALL_STATE_RINGING; }// System.out.println("来电了");// System.out.println("CALL_STATE_RINGING"); break; default: break; } } };
不知怎么回事,我这边调试的结果,总会这样。
第一次呼入会出现一个“来电了”。
但是挂断之后就会出现两个“空闲时间”
再次呼入又会出现两个“来电了”
……以后的都是出现两次状态。
我都把实现都弄成了单例了还是出现问题,都不知道在哪里的问题。
有没有大神给指点下。