首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

请问:挂断电话可以通过代码实现吗

2013-10-24 
请教:挂断电话可以通过代码实现吗?代码判断是否那个系统拨号的界面显示(也就是正在拨号),是的话,用代码挂

请教:挂断电话可以通过代码实现吗?
代码判断是否那个系统拨号的界面显示(也就是正在拨号),是的话,用代码挂断它,就相当于按了那个红色的取消键。查了半天资料也没有搞定,有朋友解决过这个问题吗?
[解决办法]
android没有提供直接的挂断电话的API,要用代码直接挂断电话,必须先导入两个aidl包:
android.telephony和com.android.internal.telephony,然后可按如下代码,进行挂断电话:
TelephonyManager telephone = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
PhoneStateListener listener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String number) {
if("关闭".equals(check)){
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_RINGING:
break;
}
}else{
if ("静音".equals(phone)) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_RINGING:
break;
}
}else if ("和谐模式".equals(phone)) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_RINGING:
try {
Method method = Class.forName(
"android.os.ServiceManager").getMethod(
"getService", String.class);
IBinder binder = (IBinder) method.invoke(null,
new Object[] { TELEPHONY_SERVICE });
ITelephony telephony = ITelephony.Stub
.asInterface(binder);
telephony.endCall();
} catch (Exception e) {
e.printStackTrace();
}
break;
}
}else{
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_RINGING:
try {
Method method = Class.forName(
"android.os.ServiceManager").getMethod(
"getService", String.class);
IBinder binder = (IBinder) method.invoke(null,
new Object[] { TELEPHONY_SERVICE });
ITelephony telephony = ITelephony.Stub
.asInterface(binder);
telephony.endCall();
} catch (Exception e) {
e.printStackTrace();
}

listNum = (List<PersonNumber>) dbHelper
.findAllNumber(PersonNumber.TABLENAME);
for (int i = 0; i < listNum.size(); i++) {
if (listNum.get(i).getNumber().equals(number)) {

String time = sdf.format(new Date());
blackNumber = new PhoneBlackNumber(listNum
.get(i).getNumber(), "未知", time);
dbHelper.insertPersonNumber(blackNumber);

Intent intt = new Intent();
intt.setAction(PhoneReceiver.PHONE_RECEIVER_ACTION);
sendBroadcast(intt);
}
}
break;
}
}
}

super.onCallStateChanged(state, number);
}
};
telephone.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);

热点排行