在自己写的apk中发现当发出activity(intent)之后会跳出需要在两个phone之间选择,这个选择会影响后面的hangup,hangup中需要相应的phone来匹配。

OutgoingCallReceiver是负责处理发过来的intent的,在它的doReceive里

 final PhoneGlobals app = PhoneGlobals.getInstance();Phone phone = app.phone;int simIndex = TelephonyConstants.DSDS_INVALID_SLOT_ID;if (TelephonyConstants.IS_DSDS) {simIndex = DualPhoneController.getSlotByIntent(intent);if (!DualPhoneController.usingPrimaryPhone(intent)) {phone = app.phone2;}

看起来这边有对phone进行了选择

研究DualPhoneController.usingPrimaryPhone(intent),这个必须是零。

static boolean usingPrimaryPhone(Intent intent) {if (!TelephonyConstants.IS_DSDS) {return true;}String sipPhoneUri = intent.getStringExtra(OutgoingCallBroadcaster.EXTRA_SIP_PHONE_URI);if (sipPhoneUri != null) {return true;}switch (findSimId(intent)) {case ID_SIM_1:return isPrimaryOnSim1() ? true : false;case ID_SIM_2:return isPrimaryOnSim1() ? false : true;default:return true;}}

关键在于isPrimaryOnSim1() ,因为这里看起来和case是谁一点关系都没有

  static boolean isPrimaryOnSim1() {return mPrimaryId == TelephonyConstants.DSDS_SLOT_1_ID;}

后面的这个TelephonyConstants.DSDS_SLOT_1_ID是个常量

关键在于mPrimaryId

private DualPhoneController(PhoneGlobals app) {mApp = app;mCM = app.mCM;mCM2 = app.mCM2;mPrimaryId = Settings.Global.getInt(PhoneGlobals.getInstance().getContentResolver(),Settings.Global.MOBILE_DATA_SIM,TelephonyConstants.DSDS_SLOT_1_ID);}

这个初始化在构造函数里

 public static int getInt(ContentResolver cr, String name, int def) {String v = getString(cr, name);try {return v != null ? Integer.parseInt(v) : def;} catch (NumberFormatException e) {return def;}

A500的dial过程选择phone相关推荐

  1. 最让人头疼的清洗数据过程----选择合适的方式快速命中所需的数据

    当我们解析网页后,往往面对繁杂的源代码而无从下手,有时候明明知道我们想要的数据就在里面,可是应该如何把冗余的部分去除而只保留我们想要的那一个部分呢 在这里和大家一起学习一下选择的方法 1.正则表达式 ...

  2. 低价神话缔造者!宏碁A500最全面评测

    转自: http://www.pcpop.com/doc/0/654/654033_all.shtml 最便宜的平板 宏碁A500有备而来 泡泡网平板电脑频道4月27日 在Android 3.0平板逐 ...

  3. C++实现十大排序算法(冒泡,选择,插入,归并,快速,堆,希尔,桶,计数,基数)排序算法时间复杂度、空间复杂度、稳定性比较(面试经验总结)

    排序算法分类 内部排序算法又分为基于比较的排序算法和不基于比较的排序算法,其分类如下: 比较排序:   直接插入排序    希尔排序 (插入)  冒泡排序     快速排序  (交换) 直接选择排序  ...

  4. 数据结构与算法笔记(七)—— 选择排序

    什么是选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 算法步骤:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大 ...

  5. 使用ipp静态库,ipp-samples在linux下的make过程

    折腾了两天终于搞定,现在把折腾的过程记录一下. 1.先安装ipp8,运行install.sh进行安装,安装过程选择评估版,因为我们也只是需要它的库,使用并不影响. 2.安装cpp_studio_xe_ ...

  6. 马尔可夫决策过程(一)

    马尔可夫决策过程(一) 最近学习了MDP,查看一些资料,本文翻译了维基百科http://en.wikipedia.org/wiki/Markov_decision_process.有许多地方翻译的不好 ...

  7. 常见的五种排序,冒泡排序,选择排序,插入排序,并归排序,快速排序

    冒泡排序 冒泡排序介绍: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地跑过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小)那么它就会按照大到小的 ...

  8. IC卡读PBOC指令交互过程

    IC卡读PBOC指令交互过程 选择PSE支付环境文件 操作 数据 发送指令 00A404000E315041592E5359532E444446303100 卡片返回数据 6F22840E315041 ...

  9. 软件需求分析——需求工程过程

    如果有兴趣了解更多相关内容,可以来我的个人网站看看:瞳孔空间 一:相关概念 需求工程过程的目的:介绍为软件加强型系统中的复杂软件设计的需求工程过程,涉及 抽取需求 分析需求 验证需求 管理需求 主要关 ...

最新文章

  1. 【数据结构】单链表的应用(C语言)
  2. 牛客网:为什么不能将实数作为 HashMap 的 key?
  3. 榜单出炉!2018中国AI英雄风云榜揭晓十位AI领军人
  4. adb和adbd详尽分析
  5. 用一条sql取得第10到第20条的记录-Mssql数据库
  6. 宝典9.2——海量数据的基本处理方法
  7. ASP.NET MVC 利用Razor引擎生成静态页
  8. C++奥赛一本通贪心题解
  9. LoadRunner教程(15)-LoadRunner 初识Analysis
  10. 使用idea时maven报错:Error reading file pom.xml
  11. 国内开源镜像网站列表
  12. [x64dbg] 实战01 - 参数打印/修改参数内容(条件断点、命令、脚本)
  13. Python获取win7下的CPU温度
  14. Maxwell-学习笔记
  15. c语言中换行符与回车符的区别,C语言中换行符与回车符的区别
  16. 常见硬件接口汇总(未完待续)
  17. preg_match_all 结果排序之PREG_SET_ORDER参数
  18. 新冠病毒可由物传人冷冻条件可长期存活,所以青岛采取三大措施!
  19. 西北乱跑娃 --- bottle web框架技术讨论
  20. Excel·VBA文件重命名、移动

热门文章

  1. windows抓屏排除指定窗口
  2. (一)jenkins+bonobo git server+windows系统自动化部署springboot项目(jenkins安装)
  3. Debian GUN/Linux Desktop grap语言配置 [大三四八九月实习]
  4. 为你揭秘,希格斯玻色子如何赋予粒子质量
  5. 台阶的意思_台阶词语解释
  6. 《那年花开月正圆》热播 让人深觉安防重要性
  7. T-LESS:制作RGBD 6D姿态数据集和标签
  8. 2019年 -- 最新前端面试题攻略
  9. 外文文献翻译(OCR+Deepl+Mathpix)|CSDN创作打卡
  10. 抗体的N端或C端进行修饰ADC偶联物的过程-瑞禧