当前位置: 代码迷 >> Android >> 【android系统有关问题】呼叫状态变化
  详细解决方案

【android系统有关问题】呼叫状态变化

热度:22   发布时间:2016-05-01 20:02:27.0
【android系统问题】呼叫状态变化
测试。做一个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;		}	}	}; 


不知怎么回事,我这边调试的结果,总会这样。
第一次呼入会出现一个“来电了”。
但是挂断之后就会出现两个“空闲时间”
再次呼入又会出现两个“来电了”
……以后的都是出现两次状态。
我都把实现都弄成了单例了还是出现问题,都不知道在哪里的问题。 

有没有大神给指点下。
  相关解决方案