我是靠谱客的博主 威武白云,最近开发中收集的这篇文章主要介绍[已验证]双卡手机下两种来电监听方法的一些问题。,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

为什么80%的码农都做不了架构师?>>>   hot3.png

首先,网上学习到的来电监听有两种方法,但在双卡手机上都不太正常工作。

经过用户的反馈,基本上都能监听到大部分主流双卡手机的主副卡来电了。如果同时使用两种监听办法,大部分机器上都会出现监听到两次,这时候需要做些防重复的处理。这里就不细说,如果你有什么防重复有什么好见解可以留言。

因为没有双卡手机用来测试,所以只能根据用户的反馈来推测原因了。是不是要兼容就得把两个方法都使用上呢?

第一种方法,据用户说三星的双卡手机(主卡与副卡)是可以的,HTC的就没有反应了。

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;
            }
        }
    }
}

转载于:https://my.oschina.net/lijy91/blog/169956

最后

以上就是威武白云为你收集整理的[已验证]双卡手机下两种来电监听方法的一些问题。的全部内容,希望文章能够帮你解决[已验证]双卡手机下两种来电监听方法的一些问题。所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部