首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

100分 Android如何调用打电话而不显示系统的通话界面

2012-04-12 
100分 Android怎么调用打电话而不显示系统的通话界面?我现在用Java反射机制调用到了打电话的功能,能够拨打

100分 Android怎么调用打电话而不显示系统的通话界面?
我现在用Java反射机制调用到了打电话的功能,能够拨打电话和挂断电话,可是拨打电话时会弹出系统自带的通话或者正在拨号的界面. 怎么做到打电话时不显示系统自带的界面?

[解决办法]
那你可得深入底层去找Android源码咯,不是SDK, 一般你发送Intent Action.dial,或者类似拨打电话的Action, 某个拨号的DialActivity会捕获到这个Action启动起来,就是这个Android系统自带的打电话界面咯, 如果你要改的话,就的自己再模仿系统自带的拨号界面那个Acitivity,实现自己的界面,并且带上对应的Action,而且还要有对应的功能,呵呵,简单来说,就是你 给原来的Activity换件衣服穿就行,不改变原来的功能,不知道这样你懂了没,来修改定制你的界面咯。
[解决办法]
你在XML文件里,设置通话界面了吗?我觉得,你要是设置了的话,把它设为FALSE试试,或者在你写的代码里,强制把通话界面给Close()掉……
[解决办法]
市面上的拨号软件似乎都没有自己的通话界面,这个在应用层似乎做不到
[解决办法]

探讨

引用:
你在XML文件里,设置通话界面了吗?我觉得,你要是设置了的话,把它设为FALSE试试,或者在你写的代码里,强制把通话界面给Close()掉……

请问怎么设置通话界面?指什么?
强制把通话界面给Close是怎么Close?
能否说详细点?

[解决办法]
就像2楼说的,你调用拨号操作,那个activity的incallscreen必然会起来,你要修改Phone的代码才可以隐藏
[解决办法]
你要做坏事??
[解决办法]
不要用 Intent 去查查打电话的底层代码 把打电话的接口提取出来试试 不过可能需要花一些时间
[解决办法]
只能深入到源码进行修改了
[解决办法]
应用层似乎木有办法
[解决办法]
没有在源代码级别估计很难搞定,因为Dial的拨号是在PhoneApp中通过RIL与模块通信的,没有其他Intent有这个权限去做,另外就算你使用shell将AT命令发送到模块端,通话过程中模块会返回CLCC AT命令给RIL,一样会触发通话界面。
[解决办法]
这个没有办法,不是权限的问题,而是整个Phone流程问题。
[解决办法]
如果在源代码级,你可以通过修改package/apps/PhoneApp下面的代码,将OutgoingCallScreen的代码重写,当然,这个修改也是巨大的。
[解决办法]
楼主 如果你做的之是一个普通应用的话,系统的打电话界面肯定会显示的,你想显示自己的界面的话,可以自己画一个view 覆盖在系统界面上面,
如果你想不显示系统的通话界面,那就只有去修改android的系统框架,普通的什么手机主题啊 都不能实现这个功能
[解决办法]
必须从framework层修改整个Phone流程
[解决办法]
感觉要修改framework
[解决办法]
探讨
引用:
必须从framework层修改整个Phone流程

能不能简单几句,把系统界面隐藏即可?

[解决办法]
当初有个软件叫X卧*底 那个就是隐藏的 只是不知道有没有安卓版本的 当时塞班上的
[解决办法]
建议还是在源码基础上修改,这样只要把callcard.java 和相关的布局修改下就可以换成自己的通话界面了。
[解决办法]
探讨

引用:
引用:
引用:
必须从framework层修改整个Phone流程

能不能简单几句,把系统界面隐藏即可?

100%确定告诉你 不可以

100%确定告诉你,我已经实现了,就写了两句话.
发现很多做过很多年的人,没有钻研精神,我问过很多做过几年Android的同事,很……

[解决办法]
楼主。这个不行,QQ通讯录也会显示系统的拨号界面的。只能在界面上面加点东西。隐藏不可能哦,只能自己修改系统做ROM了、
[解决办法]
其实这个不必隐藏。。你可以参照市面上一些应用程序,比如程序锁,比如来电显示,其实就是检测到在启动某个界面的时候,再上面添加一个view。。。toast的原理就是这样,你一直toast,然后按home,发现在home界面还是会有吐司。。。具体实现可参照toast源码300~400行之间,我记得好像有个叫TN的内部类


[解决办法]
我记得最多就是用你自己的界面盖在系统界面上面。实际上来电话的时候系统界面还是会闪一下。怎么不让系统界面出来。
[解决办法]

探讨
引用:

引用:
你在XML文件里,设置通话界面了吗?我觉得,你要是设置了的话,把它设为FALSE试试,或者在你写的代码里,强制把通话界面给Close()掉……

请问怎么设置通话界面?指什么?
强制把通话界面给Close是怎么Close?
能否说详细点?
我没涉及到着方面的问题,只是按照以往经验,觉得你可以这样尝试……

[解决办法]
这个很简单啊,如果你可以调用ril.java里面的函数,直接调用dial函数,就是拨打电话

ril.java是Android的Telephony Framework与Ril-daemon 沟通的桥梁,真正各种电话有关的功能是封装在libril-XXXX.so里面

函数调用的结果都是用asyncresult返回,自己写个HandleMessage来收结果就可以了


[解决办法]
同理,发送DTMF,直接调用ril.java里面的sendDtmf就可以了

这些我都实现过
[解决办法]
还有就是,不用反射也能实现你说的功能,让你的程序在PhoneApp里面运行就可以。

调用ril.java里的函数很简单


mPhone = PhoneFactory.getDefaultPhone();
然后直接
mPhone.sendDtmf(ch, this.obtainMessage(DTMF_SEND_REQ));

最后在handleMessage里,
 case DTMF_SEND_REQ:
来检查结果就可以了


[解决办法]
探讨
还有就是,不用反射也能实现你说的功能,让你的程序在PhoneApp里面运行就可以。

调用ril.java里的函数很简单


mPhone = PhoneFactory.getDefaultPhone();
然后直接
mPhone.sendDtmf(ch, this.obtainMessage(DTMF_SEND_REQ));

最后在handleMessage里,
ca……

热点排行