一. phone 状态的获取和判断(监听 来电、接听、挂断、拨打电话)
用一个类实现PhoneStateListener如:
class MyPhoneStateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE: // 空闲
Log.e(TAG, " 电话空闲");
mIsInCalling = false;
break;
case TelephonyManager.CALL_STATE_RINGING: // 来电
Log.e(TAG, "来电");
mIsInCalling = false;
break;
case TelephonyManager.CALL_STATE_OFFHOOK: // 摘机(正在拨号及通话中等状态)
Log.e(TAG, "正在通话中");
mIsInCalling = true;
break;
}
}
}
二. 上述做法可以监听到,电话某个时间的电话处于什么状态,但是我们思考一个问题,我们现在需要判断电话是否处于接通(正在通话状态),我们要用怎么做呢,有人会说可以监听 CALL_STATE_OFFHOOK 这个状态,但是很遗憾, 我们发现,这个状态包含了正在通话和拨号这两个动作,也就是说我们通过上述做法没有办法准确的知道电话是否正在通话中。
看来我们需要另寻方法了,用下面的做法就可以满足我们的需求:
ITelephony mPhone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
boolean isIdle = mPhone.isIdle(); //当isIdle为true时表示没有在通话,为false时表示正在通话中。
三. android4.4中,实现拨号动作
Intent intent = new Intent("android.intent.action.CALL_PRIVILEGED", Uri.parse("tel:" + mPhoneNum));
需要 android.permission.CALL_PRIVILEGED 权限
//这个intent是跳到拨号界面
Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + mPhoneNum));
需要 android.permission.CALL_PHONE 权限
//这个intent是跳到拨号盘界面,即不能直接拨号,得在拨号盘中点击拨号键
用一个类实现PhoneStateListener如:
class MyPhoneStateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE: // 空闲
Log.e(TAG, " 电话空闲");
mIsInCalling = false;
break;
case TelephonyManager.CALL_STATE_RINGING: // 来电
Log.e(TAG, "来电");
mIsInCalling = false;
break;
case TelephonyManager.CALL_STATE_OFFHOOK: // 摘机(正在拨号及通话中等状态)
Log.e(TAG, "正在通话中");
mIsInCalling = true;
break;
}
}
}
二. 上述做法可以监听到,电话某个时间的电话处于什么状态,但是我们思考一个问题,我们现在需要判断电话是否处于接通(正在通话状态),我们要用怎么做呢,有人会说可以监听 CALL_STATE_OFFHOOK 这个状态,但是很遗憾, 我们发现,这个状态包含了正在通话和拨号这两个动作,也就是说我们通过上述做法没有办法准确的知道电话是否正在通话中。
看来我们需要另寻方法了,用下面的做法就可以满足我们的需求:
ITelephony mPhone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
boolean isIdle = mPhone.isIdle(); //当isIdle为true时表示没有在通话,为false时表示正在通话中。
三. android4.4中,实现拨号动作
Intent intent = new Intent("android.intent.action.CALL_PRIVILEGED", Uri.parse("tel:" + mPhoneNum));
需要 android.permission.CALL_PRIVILEGED 权限
//这个intent是跳到拨号界面
Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + mPhoneNum));
需要 android.permission.CALL_PHONE 权限
//这个intent是跳到拨号盘界面,即不能直接拨号,得在拨号盘中点击拨号键