移动应用程序 调整铃声音量,避免环境噪音
Figure 8 自定义安装程序代码
private void Installer_AfterInstall(
object sender, System.Configuration.Install.InstallEventArgs e)
{
// Get fullpath to .ini file.
string arg = Path.Combine(
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
"Setup.ini");
// Run WinCE App Manager to install .cab file on device.
RunAppManager(arg);
}
private void Installer_AfterUninstall(
object sender, System.Configuration.Install.InstallEventArgs e)
{
// Run app manager in uninstall mode (without any arguments).
RunAppManager(null);
}
private void RunAppManager(string arg)
{
// Get path to the application manager.
const string RegPath = @"Software\Microsoft\Windows\" +
@"CurrentVersion\App Paths\CEAppMgr.exe";
RegistryKey key = Registry.LocalMachine.OpenSubKey(RegPath);
string appManager = key.GetValue("") as string;
if (appManager != null)
{
// Launch the application manager.
Process.Start(string.Format("\"{0}\"", appManager),
(arg == null) ? "" : string.Format("\"{0}\"", arg));
}
else
{
// Could not locate application manager.
MessageBox.Show(
"Could not launch the WinCE Application Manager :-(");
}
}

图 9 完整解决方案
现在,部署项目是按普通方法创建的,即向解决方案添加一个标准桌面安装项目。添加了部署模板之后,我将 custominstaller.dll 和 smartdevicecab.cab 添加到安装项目。为了引用自定义安装程序,右键单击安装项目,然后选择“查看”|“自定义操作”。接下来,我将 custominstaller.dll 添加到部署项目的“安装”和“卸载”自定义操作中。
我的部署项目需要最后一个文件——setup.ini 文件:
[CEAppManager]
Version = 1.0
Component = App
[App]
Description = TooLoud Pocket PC
application.
CabFiles = SmartDeviceCab.cab
它告诉应用程序管理器该加载哪个 CAB。图 9 显示了我的解决方案的布局。(生成顺序应设为 TooLoud—SmartDeviceCab—CustomInstall—Setup。) 现在,可以使用装有应用程序管理器的台式计算机构建和部署我的项目了。
结束语
本文概述了我使用 .NET Compact Framework 的 1.x 版本为 Visual Studio 2005 编写的一个特定示例。它说明了设计一个将使用 Windows Mobile 设备上的硬件来监控周围环境并相应自动调整铃声音量的应用程序时,所涉及的基本原则和一般技巧。当然,可以重构此代码以使用最新的技术,如 .NET Compact Framework 2.0 版本。
为了检查这个应用程序的运行状况,我同时进行了基于实验室的测试和环境测试。基于实验室的测试是为了确保电话铃声仅超过环境噪音 2-5dB(6dB 大约是两倍响度)。分贝值是通过分贝计,利用音调作为测试信号测量出来的。环境测试在两个地点进行——洛杉矶的一个咖啡馆和一个机场。我为此测试采用了非常科学的测量方式——我记下了当我的电话响起时回头的人数。
此应用程序提供了一种声音法/可靠的方法(抱歉,sound approach 这一双关语是有意使用的)来监控和自调移动电话的铃声水平。与所有应用程序一样,它也有自己的局限性,如需要为移动电话的每个型号配置参考值。尽管这不是一个不可管理的任务,但是当前用户界面并不支持它。另外一个主要限制是此方法会消耗很多电量。但是,耗电问题非常容易解决,例如,只在电话将要响起时才启用进程。
除了这些问题,此应用程序比目前仅在手动更改设置后铃声水平才能发生变化的方法更具有意义,这在我看来尤其如此。但是,还是有一些需要改进的地方,因此请根据需要自调代码并添加您认为有用的任何功能。我肯定您能想到本文中尚未探讨的很多特性和功能。