有时需要在应用中根据系统电话的状态进行应用相应的操作,公司有个有网络电话的应用,使用网络电话进行一个或多个号码拨号的操作时,运营服务商网络会回拨一个号码过来来,接到回拨后,可以选择接或者不接,另外如果调用了系统的挂断后,应用也应该去网络接口挂断,如果调用系统的不接,那么应用也应该是不会有拨出他人的电话的。不啰嗦了,直接上代码
在后台的Activity有时无法调用,这个还有点问题,待解决
直接在Activity中的onCreate()调用
getCallPhoneListener();
private void getCallPhoneListener() {
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(new PhoneListener(),
PhoneStateListener.LISTEN_CALL_STATE);
}
class PhoneListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:// 来电状态
Log.i("lanjianlong","incomingNumber = "+incomingNumber);
Log.i("lanjianlong","incomingNumber.startsWith(\"950\") ="+incomingNumber.startsWith("950"));
if(null !=incomingNumber && incomingNumber.startsWith("950"))//这是来电的电话号码,950开头的
EightPartyApplication.isEightNum = true;
break;
case TelephonyManager.CALL_STATE_OFFHOOK:// 接听状态
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> runningTasks = manager.getRunningTasks(1);
RunningTaskInfo cinfo = runningTasks.get(0);
ComponentName component = cinfo.topActivity;
// className = com.android.phone.InCallScreen
// packageName = com.android.phone
View view = LayoutInflater.from(CallPhoneActivity.this).inflate(
R.layout.show_toast, null);
TextView showtv = (TextView) view.findViewById(R.id.showtv);
showtv.setTextSize(18.0f);
Toast toast = null;
toast = new Toast(CallPhoneActivity.this);
toast.setDuration(200);
toast.setView(view);
toast.show();
// Toast.makeText(AddNewActivity.this, "请按返回键回到通话界面看谁在线",
// Toast.LENGTH_LONG).show();
String packageName = component.getPackageName();
Log.e(TAG, "className = " + component.getClassName());
Log.e(TAG, "packageName = " + packageName);
return;
case TelephonyManager.CALL_STATE_IDLE:// 挂断后回到空闲状态
Log.e("lanjianlong", "这是系统的挂断去调用应用的挂断 , isComE = "+EightPartyApplication.isEightNum);
//要加一个标志,
if(null != incomingNumber && incomingNumber.startsWith("950") && EightPartyApplication.isEightNum){
Log.i("lanjianlong","挂断");
closeMeeting();
EightPartyApplication.isEightNum = false;
}
break;
default:
break;
}
}
}