移动叔叔

标题: 记录一下适配双卡拨号盘的历程(已见光明,双卡拨号成功) [打印本页]

作者: 天若    时间: 2013-11-7 12:58
标题: 记录一下适配双卡拨号盘的历程(已见光明,双卡拨号成功)
本帖最后由 天若 于 2013-11-11 13:34 编辑

这个断断续续的做了一周多的时间了,最后可能会让大家失望,仅靠我个人的能力,怕是难成完成的事情,不过贵在坚持,分析代码虽说很累,但也有些乐趣,不知有没有做开发android的高人对此有兴趣,帮我完成一下,首先谢谢了。

1.拨号盘中添加了双卡拨号按钮,这个实现起来比较容易了,在dialpad_additional_buttons.xml布局里添加两个ImageButton,并更改其大小,然后在DialpadFragment.java里添加View mDialButton1 mDialButton2,View onCreateView里添加两个ImageButton在上面XML文件里指定的ID。onClick(监听按钮按下时执行的代码)里添加两个ImageButton按下时执行dialButtonPressedInner,(这个是拨号键按下时第一个执行的动作),并同时发送一个带有卡槽位标志的Intent,当按下mDialButton1时,发送卡槽位标志0,按下mDialButton2时,发送卡槽位标志1.
[attach]311823[/attach]



2.开始追踪代码,在拨号键按下后第二步,判断最后拨出的号码,如果有,就上屏,同时调用CallOptionHandler.java里的startActivity_1,ADB读取log,"startActivity, intent = "读取到拨出的号码,在startActivity_1里添加一个LOG代码,用来判断卡槽位标志有没有正确被发出,从LOG中看出已经正确发过来了。
3.代码继续执行,startActivity_1会判断是否为紧急号码,如果是会执行newCallBroadcastIntent,在此处添加了LOG代码,读取发现卡槽位标志也已正常发送过来了。如果不是紧急号码,就执行CallOptionHelper.java里的makeCall方法。
4.继续分析中。。一大堆的代码看不懂哈。
5.适配联想通讯录V1.8版本(这个是支持双卡拨号的)到p770上,不断的强制关闭。通过查看LOG报错,给框架添加了相应的代码,联想通讯录终于打开了,并且看到了双卡拨号盘,滑动通话记录,再返回拨号盘,又强制关闭了,先不管这些了,目的是看一下除了这个程序控制了双卡拨号,是否还有其它程序也有控制。试着打个电话,还是弹出双卡选择界面,到这才明白在phone.apk里也有代码需要适配了。

6.反编译phone.apk.分析OutgoingCallReceiver.java.为什么直接定位到这里了呢,拨号盘发出的卡槽位标志只有这里才有,所以果断定位到此。通过其它双卡拨号ROM中的phone代码对比,去掉了onReceive中MultiSelectDialog(这个是弹出选择卡的主代码)的相关代码,回编译上机。终于可以正常拨号了。
7.接下来要做的是一些调整修改了,像单卡只显示一个拨号按钮,还有修复IP拨号不能选择卡的问题。

8.添加的拨号按钮可以正常打出电话了,不过在拨号盘上方通话记录这块,当按下右边的拨号图标后,却只能从卡1打出电话,这个就碉堡了。查看log日志,发现当返回newCallBroadcastIntent后,原来发送的卡槽标志值被改为0了,当然只能从卡1打出了。看来还需要修改其它的地方。继续分析中。。。





欢迎光临 移动叔叔 (http://bbs.ydss.cn/) Powered by Discuz! X3.2