概述
为什么80%的码农都做不了架构师?>>>
首先,网上学习到的来电监听有两种方法,但在双卡手机上都不太正常工作。
经过用户的反馈,基本上都能监听到大部分主流双卡手机的主副卡来电了。如果同时使用两种监听办法,大部分机器上都会出现监听到两次,这时候需要做些防重复的处理。这里就不细说,如果你有什么防重复有什么好见解可以留言。
因为没有双卡手机用来测试,所以只能根据用户的反馈来推测原因了。是不是要兼容就得把两个方法都使用上呢?
第一种方法,据用户说三星的双卡手机(主卡与副卡)是可以的,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
最后
以上就是威武白云为你收集整理的[已验证]双卡手机下两种来电监听方法的一些问题。的全部内容,希望文章能够帮你解决[已验证]双卡手机下两种来电监听方法的一些问题。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复