if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
// 去电,可以用定时挂断
} else {
//来电
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
Log.d(PhoneListenService.TAG, "PhoneStateReceiver onReceive state: " + state);
if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)) {
Log.d(PhoneListenService.TAG, “PhoneStateReceiver onReceive endCall”);
HangUpTelephonyUtil.endCall(context);
}
}
}
}
三. 实战,有什么需要特别注意地方
3.1 双卡双待的手机怎么获取
对于双卡手机,每张卡都对应一个 Service 和一个 PhoneStateListener,需要给每个服务注册自己的 PhoneStateListener,服务的名称还会有点变化,厂商可能会修改
public ArrayList getMultSimCardInfo() {
// 获取双卡的信息,这个也是经验尝试出来的,不知道其他厂商有什么坑
ArrayList phoneServerList = new ArrayList();
for(int i = 1; i < 3; i++) {
try {
String phoneServiceName;
if (MiuiUtils.isMiuiV6()) {
phoneServiceName = “phone.” + String.valueOf(i-1);
} else {
phoneServiceName = “phone” + String.valueOf(i);
}
// 尝试获取服务看是否能获取到
IBinder iBinder = ServiceManager.getService(phoneServiceName);
if(iBinder == null) continue;
ITelephony iTelephony = ITelephony.Stub.asInterface(iBinder);
if(iTelephony == null) continue;
phoneServerList.add(phoneServiceName);
} catch(Exception e) {
e.printStackTrace();
}
}
// 这个是默认的
phoneServerList.add(Context.TELEPHONY_SERVICE);
return phoneServerList;
}
3.2 挂断电话
挂断电话使用系统服务提供的接口去挂断,但是挂断电话是个并不能保证成功的方法,所以会有多种方式挂断同时使用,下面提供
package com.phone.listen;
import android.content.Context;
import android.os.RemoteException;
import android.telephony.TelephonyManager;
impor