反复拨打电话,电话测试小程序,紧急电话与普通电话分枝判断
2012-03-29 12:25
471 查看
手机立将要上市了,狠是兴奋!
写了个小程序(十分简单)给测试人员用,自己也测测自己负责的Phone到目前为止,进行暴风雪测试还有些什么问题?
在写程序时遇到一个问题,本应该测试10086拨打测试,但由于要测试的机器有多部,没有那么多的sim卡,故想到拨打紧急电话来进行测试,如112
但由于:紧急电话与普通电话分枝的不同,给自己带来一个问题,拨打紧急电话112,给跑到其它activity中,拨打不成功。现分析下为什么会出现这情况,也请各位给出更好地解决拨打112紧急电话的访问方式:
在上次提到的:利用服务实现电话监听-来电-接听-挂断,进行录音中有监听电话胡程序,故我们可以利用监听电话的方式来实现此小测试程序
1.在CALL_STATE_IDLE无状态(即空闲状态),可以进行电话的拨打,可以适当sleep几秒钟
2.CALL_STATE_OFFHOOK 接通电话(即挂起),可以进行电话结束,可以适当sleep几秒钟
3.CALL_STATE_RINGING 电话进来(即来电时)
通过上面的想法是可以实现电话地反得拨打,反复挂断。见部分如下代码:
1. 实现电话监听:
2.实行电话监听的代码:
3.之所以拨打非紧急电话时是正常,而拨打紧急电话,则会跑到其它的程序中去,问题就出在如下使用的intent中,但又用什么胡访问方式能使紧急与非紧急电话都可以打呢?
由于紧急电话与非紧电话分枝不同:
见:android phone电话拨出上层java流程 的分析。可以得到在OutgoingCallBroadcaster.java中有:
进行号码判断
如果为紧急电话:
非紧急电话:
PS:简单见apk:http://download.csdn.net/detail/wangqilin8888/4182853,安装之后直接进入拨打10086,修改代码中的speedDial("10086");可以打不同的号码,但要sim或usim卡,如果想要打紧急电话来进行测试,还没有想到更好的办法,你帮忙想想,谢谢。等着你!
写了个小程序(十分简单)给测试人员用,自己也测测自己负责的Phone到目前为止,进行暴风雪测试还有些什么问题?
在写程序时遇到一个问题,本应该测试10086拨打测试,但由于要测试的机器有多部,没有那么多的sim卡,故想到拨打紧急电话来进行测试,如112
但由于:紧急电话与普通电话分枝的不同,给自己带来一个问题,拨打紧急电话112,给跑到其它activity中,拨打不成功。现分析下为什么会出现这情况,也请各位给出更好地解决拨打112紧急电话的访问方式:
在上次提到的:利用服务实现电话监听-来电-接听-挂断,进行录音中有监听电话胡程序,故我们可以利用监听电话的方式来实现此小测试程序
1.在CALL_STATE_IDLE无状态(即空闲状态),可以进行电话的拨打,可以适当sleep几秒钟
2.CALL_STATE_OFFHOOK 接通电话(即挂起),可以进行电话结束,可以适当sleep几秒钟
3.CALL_STATE_RINGING 电话进来(即来电时)
通过上面的想法是可以实现电话地反得拨打,反复挂断。见部分如下代码:
1. 实现电话监听:
private TelephonyManager telMgr; private ITelephony ITel; telMgr = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); telMgr.listen(new TeleListener(),PhoneStateListener.LISTEN_CALL_STATE);
2.实行电话监听的代码:
class TeleListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE: { try { // getDial(); Thread.sleep(10000); //睡10s speedDial("10086"); //或112 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; } case TelephonyManager.CALL_STATE_OFFHOOK: { Class<?> c = null; try { Thread.sleep(10000); //睡10s c = Class.forName("android.telephony.TelephonyManager"); Method m = c.getDeclaredMethod("getITelephony"); m.setAccessible(true); ITel = (ITelephony) m.invoke(telMgr); ITel.endCall(); //10s后进行挂断 } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; } case TelephonyManager.CALL_STATE_RINGING: { break; } default: break; } } }
3.之所以拨打非紧急电话时是正常,而拨打紧急电话,则会跑到其它的程序中去,问题就出在如下使用的intent中,但又用什么胡访问方式能使紧急与非紧急电话都可以打呢?
public void speedDial(String s){ Intent phoneIntent = new Intent("android.intent.action.CALL", //可以拨打非紧急电话,有权限,由于紧急电话与非紧电话分枝不同,下面分析分枝所在地 Uri.parse("tel:" + s)); startActivity(phoneIntent); // Intent callIntent = new Intent(Intent.ACTION_CALL_PRIVILEGED,Uri.fromParts("tel", s, null)); //如果利此方式进行访问,权限不够,在Phone以外不能进行访问 // startActivity(callIntent); }
由于紧急电话与非紧电话分枝不同:
见:android phone电话拨出上层java流程 的分析。可以得到在OutgoingCallBroadcaster.java中有:
进行号码判断
String action = intent.getAction(); String number = PhoneNumberUtils.getNumberFromIntent(intent, this); // Check the number, don't convert for sip uri // TODO put uriNumber under PhoneNumberUtils if (number != null) { if (!PhoneNumberUtils.isUriNumber(number)) { number = PhoneNumberUtils.convertKeypadLettersToDigits(number); number = PhoneNumberUtils.stripSeparators(number); } } final boolean emergencyNumber = (number != null) && PhoneNumberUtils.isEmergencyNumber(number);
如果为紧急电话:
if (emergencyNumber) { Log.w(TAG, "Cannot call emergency number " + number + " with CALL Intent " + intent + "."); Intent invokeFrameworkDialer = new Intent(); // TwelveKeyDialer is in a tab so we really want // DialtactsActivity. Build the intent 'manually' to // use the java resolver to find the dialer class (as // opposed to a Context which look up known android // packages only) invokeFrameworkDialer.setClassName("com.android.contacts", "com.android.contacts.DialtactsActivity"); invokeFrameworkDialer.setAction(Intent.ACTION_DIAL); invokeFrameworkDialer.setData(intent.getData()); if (DBG) Log.v(TAG, "onCreate(): calling startActivity for Dialer: " + invokeFrameworkDialer); startActivity(invokeFrameworkDialer); finish(); return; }
非紧急电话:
if (callNow) { intent.setClass(this, InCallScreen.class); if (DBG) Log.v(TAG, "onCreate(): callNow case, calling startActivity: " + intent); startActivity(intent); }
PS:简单见apk:http://download.csdn.net/detail/wangqilin8888/4182853,安装之后直接进入拨打10086,修改代码中的speedDial("10086");可以打不同的号码,但要sim或usim卡,如果想要打紧急电话来进行测试,还没有想到更好的办法,你帮忙想想,谢谢。等着你!
相关文章推荐
- Android开发(一)拨打电话程序
- 自动判断网页上的电话&点击久可以拨打
- Android拨打电话和发短信的简单程序
- 软件测试 -- 在配置测试中,如何判断发现的缺陷是普通问题还是特定的配置问题?
- 程序拨打电话函数汇总
- 给大家推荐一个用电脑拨打普通电话的软件skype
- 近期的安卓学习开发SOS APP的一些总结文档 (拨打电话 加载首页图片的异步代码 判断是否有网络代码)
- Android开发(一)拨打电话程序
- CSipSimple程序之拨打电话
- 拨打电话后回到程序页面
- 微信小程序点击手机号,拨打电话
- iOS程序中调用系统自带应用(短信,邮件,浏览器,地图,appstore,拨打电话)
- 在程序中实现邮件发送,电话拨打,sms,以及浏览器功能能的方法整理
- iOS程序中调用系统自带应用(短信,邮件,浏览器,地图,appstore,拨打电话)
- iOS程序中调用系统自带应用(短信,邮件,浏览器,地图,appstore,拨打电话)
- Big-Endian和Little-Endian的判断,以及我写的C语言测试程序
- ios 拨打电话 挂断后直接返回程序
- 在程序中实现邮件发送,电话拨打,sms,以及浏览器功能能的方法整理
- Android基础-拨打电话程序