Microsoft  CSIP   WindowsMobile   MEDC   合作伙伴   体验中心 设为首页 加到收藏夹

 
登录       点击换一张     注册新用户 找回密码

.Net CF中电话状态的捕获(Part 1)
2008年05月06日03:54   编辑:黄季冬 来源: 博客园 浏览: 614

之前写过一篇随笔:

[CF.Skills]在.NET Compact Framework中获取来电号码和屏蔽来电,本文算是它的狗尾续貂篇。

有些朋友在BBS上或者在我的blog上面留言问如何得知电话的接通状态,比如说接通,挂断或者挂起(等待)比较传统的方法是使用,Windows CETelephony API(TAPI),不过你可能要写比较麻烦的代码,可能涉及到一些回调函数。可以参阅SDK下面的cellcore例子。
Windows Mobile 5以后的机器上,你可以使用一些TAPIWrapper,在托管代码中实现它的相应功能。比如这里要提的SystemProperty.PhoneCallTalkingSystemProperty.PhoneActiveCallCount

下面的程序演示了如何利用他们来获得电话状态:

       public void ListenCall()
        {
            callState 
= new SystemState(SystemProperty.PhoneCallTalking);
            callCount 
= new SystemState(SystemProperty.PhoneActiveCallCount);
            callState.Changed 
+= new ChangeEventHandler(callState_Changed);
            callCount.Changed 
+= new ChangeEventHandler(callCount_Changed);
        }

        void callCount_Changed(
object sender, ChangeEventArgs args)
        {
            
if (args.NewValue != null && (int)args.NewValue !=0)
             MessageBox.Show(
"Call Incoming");
        }

        void callState_Changed(
object sender, ChangeEventArgs args)
        {
            
if (args.NewValue != null)
            {
                
String state = ((int)args.NewValue) == 1 ? "talking" : "hang up";
                MessageBox.Show(state);
            }
        }


运行效果:
来电

接电话

挂起

这里订阅的两个事件都很有用,callState.Changed是用来判断电话是否正在通话中,一旦状态发生改变,该事件被触发,当正在通话时,事件参数的值变为true,挂断时,事件参数的值为falsecallCount.Changed是当前接通的线路数量,有来电时+1(默认为零),挂断时-1

不过我发现这里有个问题,也许是CFBUG。当我移除或者替换MessageBox.Show("Call Incoming...");这一句的时候,callState.Changed似乎永远不会被触发了。我使用的使WM6 pro Emulator + Cellular Emulator做的测试。在我的设备上(Intel Xscale 416mhz, WM5 PPC phone,.Net CF 3.5)测试,按接听电话的键之后立即出现Phone对话框,仍然有不能触发callState.Changed的问题,似乎是事件监听的线程被阻塞, 这是否是CFBUG还有待进一步测试。

发表评论
评论标题 :
评论内容 :

    查看评论

请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。 本站拥有管理笔名和留言的一切权利。
相关文章推荐
· 在.NET Compact Framework中获取来电号码和屏蔽来电 2008-5-6  黄季东
· Windows Mobile如何编程实现免提功能 2008-5-6  黄季东
· .NET Compact Framework扩展控件 2008-4-28  youli_113
· 用.NET Compact Framework创建图像按钮 2008-4-28  youli_113
· 基于.net compact framework 2.0,C#开发windows mobile 5.0程序遇到的一些问题和解决 2008-4-28  佚名

  

论坛推荐  
热点活动
更多»

© CSIP 信息产业部软件与集成电路促进中心 All Rights Reserved 版权所有 京ICP备06020771号
联系电话:010-63951881-8003 王先生        邮件:wangj@csip.org.cn