手机立将要上市了,狠是兴奋!

写了个小程序(十分简单)给测试人员用,自己也测测自己负责的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卡,如果想要打紧急电话来进行测试,还没有想到更好的办法,你帮忙想想,谢谢。等着你!

反复拨打电话,电话测试小程序,紧急电话与普通电话分枝判断相关推荐

  1. 测试-小程序打码平台

    一.背景 1.小程序不同于H5有线上和线下环境,而是区分开发版.体验版.正式版,并且每个版本都有对应的权限管控 2.平时项目测试过程中,都是基于开发码进行测试和验收的: 3.开发码生成的流程:开发分支 ...

  2. python快递分拣小程序_python英语单词测试小程序代码实例

    这篇文章主要简介了python英语单词测试小程序代码实例,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下 爬取了扇贝英语网,并制作了一个英语单词测试 ...

  3. 微信开发者工具测试小程序

    使用微信开发者工具测试小程序 1.安装微信开发者工具.VS code工具 2.拉代码到本地,通过git clone 代码仓库路径下载代码 3.用VS code生成dist文件 VS code打开拉取到 ...

  4. 趣味测试小程序源码带流量主广告位开源小程序

    新款趣味测试小程序源码,带流量主,如图,测试功能正常,免服务器免域名,设置几个安全域名即可.安全域名及广告位替换位置已打包,有需要的自行下载. 测试花样巨多 激励广告:adunit-4a7ca5d3 ...

  5. 新款趣味测试小程序源码_测试可用

    如图,测试功能正常,免服务器免域名,设置几个安全域名即可. 安全域名及广告位替换位置已打包,有需要的自行下载. 新款趣味测试小程序源码_测试正常-PHP文档类资源-CSDN下载

  6. 【免费领取】趣味测试小程序源码/内置超多趣味测评+可插入流量主广告位微信小程序源码

    本资源可免费获取,请至尾部读阅! 类型: 小程序 大小:2MB 说明:仅供学习使用 语言:PHP 介绍: 趣味测试小程序源码,本程序无后台,可插入流量主广告位,实现躺赚模式,内置超多趣味测评,界面美观 ...

  7. 抖音姓名测试软件,抖音姓名配对测试小程序

    这是一款通过填入男女双方名字来得出是否配对的休闲测试类小游戏.现在有很多的年轻小情侣,平日里就喜欢做一些名字以及星座相关的测试,而之前体验了星座,现在就可以在这里来测试一下情侣之间的姓名是否搭配,只需 ...

  8. 借助BetterZip自制压缩包测试小程序

    在之前的<BetterZip的三大使用模式>一文中我们了解到BetterZip可以在其他程序,如Automator中调用BetterZip.今天就给各位小伙伴们具体介绍一下:如何通过以上两 ...

  9. 小白开发微信小程序49--本地服务器部署测试小程序

    相信大家对微信小程序的基础和项目应该没有太大问题了,如果还有对微信小程序开发有一些问题,请查看回顾...微信小程序开发者开发好一款微信小程序后,怎么才能发布呢?如何将其提交给微信审核呢? 在前面的[领 ...

  10. python测试代码_python英语单词测试小程序代码实例

    这篇文章主要介绍了python英语单词测试小程序代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 爬取了扇贝英语网,并制作了一个英语单词测试的 ...

最新文章

  1. 第一篇学术演讲准备两个月,去了谷歌却做不了深度学习,听Facebook田渊栋谈人生挑战与选择...
  2. pandas在dataframe指定位置添加新的数据列、使用insert函数
  3. mac 下 mamp 配置虚拟主机步骤
  4. 网站自己生成专题php,phpcms生成专题的同时自动生成专题相关文章
  5. 由Linux内核bug引起SSH登录缓慢问题的排查与解决
  6. mysql单表最大数据量_你的Mysql库真需要Adaptive Hash Index
  7. 体验 ASP.NET Core 中的多语言支持(Localization)
  8. python读取数据库文件的扩展名_Python读取sqlite数据库文件的方法分析
  9. 教徒计划出品:升级vCenter41到vCenter5
  10. mysql 自增长改动_优化了MYSQL大量写入问题,老板奖励了1000块给我
  11. 大数据时代下的信息安全
  12. 【转载+思考】追问泄题之源:命题权寻租打开方便之门
  13. linux闹钟命令,Linux基础命令一
  14. CAD使用圆,椭圆,直线综合练习
  15. 传播小知识:timeout限制时间命令
  16. oracle数据库的使用
  17. PHP文件上传接口(带参数)
  18. 【uniapp前端组件】仿微信通讯录列表组件
  19. python 爬虫爬取无损图片 批量下载wallhaven超清壁纸
  20. 嵌入式工程师月薪最高排行榜

热门文章

  1. mysql oradba,使用SQL语句查询表及表字段类型说明
  2. 面试八股复习信息笔记(自用不适合别人)
  3. Android中的文件存储问题
  4. LeetCode算法题解与思路汇总
  5. linux设备驱动总结,《Linux设备驱动开发详解(第3版)》海量更新总结
  6. 跑步装备推荐,双十一跑步运动装备分享
  7. 小米note3 android费电,大电池就是续航长?荣耀 Play3 与红米 Note8 耗电效率实测对比...
  8. 爬取人人网主要对于登陆而言 基于py3 由于注册问题没有好友
  9. 记录新站www.recuva.cn的优化过程
  10. 申请国外免费空间必备的免费电话:短信、语音验证不再是难题