首先,网上学习到的来电监听有两种方法,但在双卡手机上都不太正常工做。 java
通过用户的反馈,基本上都能监听到大部分主流双卡手机的主副卡来电了。若是同时使用两种监听办法,大部分机器上都会出现监听到两次,这时候须要作些防重复的处理。这里就不细说,若是你有什么防重复有什么好看法能够留言。 android
由于没有双卡手机用来测试,因此只能根据用户的反馈来推测缘由了。是否是要兼容就得把两个方法都使用上呢? app
第一种方法,据用户说三星的双卡手机(主卡与副卡)是能够的,HTC的就没有反应了。 ide
import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.TelephonyManager; import android.util.Log; /** * 电话状态的监听广播 * @author Lijy91 * @created 2013.3.31 */ public class IncomingCallReceiver extends BroadcastReceiver { // Tag private String Tag = this.getClass().getSimpleName(); private static String call_number = null; @Override public void onReceive(Context ctx, Intent intent) { // 去电 if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); Log.d(Tag, String.format("call Out : %s", phoneNumber)); // 来电 } else { TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Service.TELEPHONY_SERVICE); switch (tm.getCallState()) { // 响铃中 case TelephonyManager.CALL_STATE_RINGING: call_number = intent.getStringExtra("incoming_number"); Log.d(Tag, String.format("call Ringing : %s", call_number)); break; // 已接通 case TelephonyManager.CALL_STATE_OFFHOOK: Log.d(Tag, String.format("call Offhook : %s", call_number)); break; // 挂断 case TelephonyManager.CALL_STATE_IDLE: Log.d(Tag, "call Idle"); break; } } } }
第二种方法经试验,支持单卡和某款HTC的双卡手机,三星NOTE2没法监听(主卡正常,副卡没法监听) 学习
import android.content.Context; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; /** * @author lijy91 * */ public class PbPhoneStateListener extends PhoneStateListener { // Tag private String Tag = this.getClass().getSimpleName(); public PbPhoneStateListener(Context context) { this.mContext = context; } @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { // 响铃中 case TelephonyManager.CALL_STATE_RINGING: { Log.d(Tag, String.format("call Ringing : %s", incomingNumber)); break; } // 已接通 case TelephonyManager.CALL_STATE_OFFHOOK: { Log.d(Tag, String.format("call Offhook : %s", incomingNumber)); break; } // 挂断 case TelephonyManager.CALL_STATE_IDLE: { Log.d(Tag, "call Idle"); break; } } } }