30 Days of .NET [Windows Mobile Applications] - Day 02: Bluetooth Manager(蓝牙管理器)

简介:

原文见 Day 02: Bluetooth Manager

需求

Page Brooks为了省电,想一步完成Bluetooth开关的操作。

实现

使用的技术有P/Invoke蓝牙API, PictureBox, State and Notification Broker API.

看过我之前的文章会知道,在Windows Mobile下打开关闭Bluetooth,就是P/Invoke BthSetMode().

.NET Compact Framework下的Bluetooth开发 之 Windows Embedded Source Tools for Bluetooth

.NET Compact Framework下的Bluetooth开发 之 32feet.NET

.NET Compact Framework下的Bluetooth开发 之 Bluetooth Virtual Serial Port

   [DllImport( " BthUtil.dll " )]
   
private   static   extern   int  BthGetMode( out  RadioMode dwMode);
   [DllImport(
" BthUtil.dll " )]
   
private   static   extern   int  BthSetMode(RadioMode dwMode);

 

状态变更功能,如果外部程序变更了Bluetooth的状态,当前程序需要被通知并处理变更。

复制代码
using  Microsoft.WindowsMobile.Status;
SystemState bluetoothStatePowerOn 
=   new  SystemState(SystemProperty.BluetoothStatePowerOn);
bluetoothStatePowerOn.Changed 
+=   new  ChangeEventHandler(bluetoothStatePowerOn_Changed);

void  bluetoothStatePowerOn_Changed( object  sender, ChangeEventArgs args)
{
   UpdateScreen();
}
复制代码

这里使用了State and Notifications Broker API,需要引用Microsoft.WindowsMobile.Status库。SystemState(SystemProperty.BluetoothStatePowerOn)指定了状态监控的类型,生成Bluetooth开关的系统状态对象,bluetoothStatePowerOn.Changed += new ChangeEventHandler(bluetoothStatePowerOn_Changed)订阅Bluetooth开关系统状态的变更消息,并使用bluetoothStatePowerOn_Changed进行处理该消息。

State and Notifications Brokerz API是一个很重要的API,这API可以监控注册表的变化状况。总所周知,在Windowns里面注册表就是保持系统信息和应用程序信息的小型数据库。State and Notifications Brokerz API提供监控注册表的功能,表示他能监控系统信息以及应用程序信息的变化。这些信息包括摄像头状态,ActiveSync,电源状态,SMS,计划任务,呼叫信息,Bluetooth状态,网络链接状态,modem状态等等。所以这API广泛运用于系统信息相关事件触发的开发,参考链接见下面。

增加自动关闭程序功能。

 

复制代码
private   void  timer_Tick( object  sender, EventArgs e)
{
 textBox.Text 
=   string .Empty;

 
for  ( int  i  =   10 ; i  >   0 ; i -- )
 {
  textBox.Text 
+=   string .Format( " Auto shutdown in {0} seconds "   +  Environment.NewLine, i);
  Thread.Sleep(
1000 );
 }

 
this .Close();
}

this .timer.Interval  =   60000 ;
复制代码

这个程序运行1分钟后,自动关闭自己。在关闭前,有10秒钟的倒数,目的使得用户知道这个程序不是Crash,而是自动关闭了,这是用户友好性设计的表现。

Emulator下调试

由于Windows Mobile的Emulator不直接支持Bluetooth,所以源代码需要在真实设备上进行调试,为了方便,可以尝试在Emulator调试。可以参考
施炯  同学的文章 在Windows Mobile模拟器上使用蓝牙以及 Dmitry Klionsky的Bluetooth for Microsoft Device Emulator

 

安装程序bluetoothManager.cab

源代码bluetoothManager.zip


 

参考文献:
MSDN:State and Notifications Broker

 

.NET Compact Framework, WinCE, Windows Mobile开发系列

Jake's Blog in 博客园 -- 精简开发 无线生活


    本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2009/05/21/1471659.html,如需转载请自行联系原作者



相关文章
|
2月前
|
Windows
windows 电脑 连接蓝牙耳机没有麦克风
【8月更文挑战第31天】当Windows电脑连接蓝牙耳机后无法使用麦克风时,可尝试以下步骤解决:检查蓝牙设置,确保耳机正确连接并开启麦克风选项;检查音频设备设置,确认蓝牙耳机为默认播放和录制设备;更新蓝牙和音频驱动;确认耳机与系统的兼容性及正确设置。如问题未解,可重新配对耳机或联系客服。
2620 7
|
3月前
|
Linux C++ Windows
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
|
28天前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
80 9
|
19天前
|
Windows
.NET 隐藏/自定义windows系统光标
【10月更文挑战第20天】在.NET中,可以使用`Cursor`类来控制光标。要隐藏光标,可将光标设置为`Cursors.None`。此外,还可以通过从文件或资源加载自定义光标来更改光标的样式。例如,在表单加载时设置`this.Cursor = Cursors.None`隐藏光标,或使用`Cursor.FromFile`方法加载自定义光标文件,也可以将光标文件添加到项目资源中并通过资源管理器加载。这些方法适用于整个表单或特定控件。
|
3月前
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
133 3
|
3月前
|
Java Windows 容器
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
|
3月前
|
网络安全 API 数据安全/隐私保护
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
|
3月前
|
Java 开发工具 Spring
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
|
3月前
|
开发框架 JavaScript .NET
【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found
【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found
|
3月前
|
C# 开发者 Windows
WPF在.NET9中的重大更新:Windows 11 主题
WPF在.NET9中的重大更新:Windows 11 主题
45 0