想实现一个自动拨号程序,在拨入后能自动输入号码,即能支持10086一类的自动语音系统。
1.最先测试了
Intent  intent  =  new  Intent(Intent.ACTION_CALL,  Uri.parse("tel:10086"));  
startActivity(intent);  
支持拨号,但弹出了系统的拨号盘,后面的号码只能手动输入。
2.然后参考
TelephonyManager  telMgr  =  (TelephonyManager)getSystemService(TELEPHONY_SERVICE);   
Method  getITelephonyMethod  =  telMgr.getClass().getDeclaredMethod("getITelephony");           
getITelephonyMethod.setAccessible(true);   
ITelephony  iTelephony  =  (ITelephony)  getITelephonyMethod.invoke(telMgr,  (Object[])null);   
iTelephony.call("10086");  
找不到ITelephony的定义,网上狂搜,终于有人指出在SDK中的datacomandroidinternalte lephony下,将data目录加为Build Path,发现DEX报错重复引入了。
改为只引入telephony目录能编译了,就是有些别扭。也是弹出拨号盘。
3.再狂搜,终于发现网上有人指出只要引入datalayoutlib.jar,只是再次出错,dex报出Java heap space,找来找去网上给出方案是应当用户库的形式导入,试用后问题解决
4.由于以上方法都没有解决实际问题,忽然想到把ROM中的Phone.apk反编译试试,用到了dex2jar。
查看了拨号盘按下去的事件,原来是用了com.android.internal.telephony.CallManager中的sendBurstDtmf。
双音多频DTMF,搜索了一下相关概念,原来接通以后送出的按键就是DTMF啊!
这次改用反射,狗血的是居然找不到sendBurstDtmf方法,再看Phone.apk,底层又调用了com.android.internal.telephony.Phone,而正好这里有sendDtmf.改用Phone接口来做。
5.使用PhoneFactory.getDefaultPhone();返回Phone,结果模拟器中一跑报错PhoneFactory.getDefaultPhone must be called from Looper thread
原来是权限不够,manifest加入android:sharedUserId="android.uid.phone",application加入android:process="com.android.phone"。
安装不上INSTALL_FAILED_SHARED_USER_INCOMPATIBLE,这次是签名不对了,要用到platform.x509.pem、platform.pk8,找了半天,还不知道在哪下,如果不同版本还不一样那可怎么办。
终于在CyanogenMod/android_build/target/product/security/下找到,签上名,能在模拟器下用了。
6.测试实际手机了,怎么安到手机上是个大问题,后来找到"adb -s 设备名 install XXX.apk",在模拟器和手机同时存在的情况下指定安到手机。
安装报INSTALL_FAILED_INVALID_INSTALL_LOCATION,原来要安装到/system/app下,只能复制到手机指定目录下,安装,没反应,心灰了因为这个安装不知道怎么调试。
重启手机一看,居然给安上了,再测试,成功拨打10086后继续发出了按键并得到了回复,没有弹出拨号盘。
   

自动拨号程序调试过程相关推荐

  1. 电话自动拨号自动录音

    随着人们生活水平的提高和安防意识的增强, 急需开发面向大众.价格低廉.运行可靠的自动报警系统.鉴于住宅电话和移动通信设备的普及, 以及电话语音报警的快捷.有效及价格低廉等优点, 公共通信网成了报警系统 ...

  2. Android eclipse 程序调试

    一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的. 步骤如下. 1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakp ...

  3. linux下c/c++程序调试拾遗

    linux下c/c++程序调试拾遗 以下为整理c++程序调试过程中经常用到的工具链 1. 调试利器GDB linux下c++程序的调试,绕不过去的第一个就是gdb无疑了: 1.1 启动gdb gdb ...

  4. 57. Android之程序调试LogCat (转)

    无论什么样的程序开发过程中,出现错误都是不可避免的,一般情况下,语法错误会被开发环境检测到,并能及时的提示我们错误的位置以及修改的方法,但是逻辑错误就不是那么容易被发现了,通常逻辑错误的定位和分析是一 ...

  5. c语言程序只能调试成功一半,c语言程序的调试方法所谓程序调试是指对程序的查错和排错。调试程序一般应经过以下几个步骤:一、先进行人工检查,即静态检查。在写好一个程序以后,不要匆匆忙忙...

    c语言程序的调试方法 所谓程序调试是指对程序的查错和排错. 调试程序一般应经过以下几个步骤: 一.先进行人工检查,即静态检查. 在写好一个程序以后,不要匆匆忙忙上机,而应对程序进行人工检查.这一步十分 ...

  6. 在c语言中调试作用是什么意思,c语言程序调试方法整理

    c语言程序的调试方法 所谓程序调试是指对程序的查错和排错. 调试程序一般应经过以下几个步骤: 一.先进行人工检查,即静态检查. 在写好一个程序以后,不要匆匆忙忙上机,而应对程序进行人工检查.这一步十分 ...

  7. L2TP详解(四)——LAC自动拨号隧道和会话建立过程

    今天继续给大家介绍HCIE安全,本文主要给大家介绍LAC自动拨号隧道和会话建立过程. 与NAS-Initiated建立隧道方式不同,LAC自动拨号是无需触发的永久隧道,一旦配置完毕,即可建立永久隧道, ...

  8. Windows下使用任务计划程序实现宽带开机自动拨号和断线自动重连

    由于学校网络改造,我们告别了客户端登录的锐捷,迎来了PPPoE拨号的深澜,本以为新的认证计费系统能带来更好的体验,结果偏偏在很基础的功能上出问题,诸如macOS下拨号没有IPv6地址.高峰期卡成狗.不 ...

  9. 苹果手机自动默认长数字为手机号,调用拨号程序

    苹果手机自动默认长数字为手机号,调用拨号程序,是因为苹果把它默认为了a链接. 当然,如果直接加上百度出来的meta标签(<meta name="format-detection&quo ...

最新文章

  1. usaco Superprime Rib
  2. 几种经典的居中技巧(垂直和水平居中)
  3. C#百度OCR-本地和网络图片识别文字
  4. 在UpdatePanel中弹出对话框
  5. 64位java怎么安装使用_如何在64位Windows计算机上安装rJava与64位R一起使用?
  6. Ubuntu下firefox启动问题
  7. P3391 【模板】文艺平衡树 fhq-treap 模板
  8. 断路器操作机构分合闸线圈电流特征曲线特点
  9. 第三节:ThreadPool的线程开启、线程等待、线程池的设置、定时功能
  10. C++:17---函数指针
  11. 14. Thinking carefullly about copying behavior in resource-managing classes
  12. JS对数组对象按照某个字段进行排序
  13. 阿里云块存储快照服务背后的技术原理
  14. php阴历阳历互转类(1900~2100年)
  15. Verilog模块语法
  16. 2018年实现营收79.17亿元,科大讯飞能否决胜于人工智能时代?
  17. vscode及typro快捷键
  18. mavon-editor编辑器与图片上传
  19. the work directory /tmp/ oracle,Oracle升级问题总结
  20. 高版本Word保存为97-2003版本公式变图片问题

热门文章

  1. 基于ssm的远程家庭健康监测管理系统设计与实现-计算机毕业设计源码+LW文档
  2. 无线串口服务器设计,基于无线串口服务器的DNC实验系统设计与开发.pdf
  3. 无法修复此计算机蓝屏,怎么修复蓝屏错误-万兴恢复专家
  4. 【值得反复看反复思考】博弈心理学完结撒花(精华篇)
  5. 魔百盒cm201-1, cm211-1 免费线刷固件及教程(长虹ch代工)
  6. 利用jquery的ajax实现文件上传
  7. 机器学习案例:运营商客户流失的数据分析 #数据去重#数据分组整合#缺失值处理#相关性分析#样本平衡#决策树、随机森林、逻辑回归
  8. 12v农用车发电机接线图_农用车发电机与汽车发电机有什么不同?
  9. 关于Unity粒子系统碰撞的几个坑
  10. dsPIC(dsPIC30F4011) Bootloader原理及应用