我已经在Windows Phone 7应用程序上工作了几个月,并且有一组有用的检测标志,用于测试代码是否在模拟器中运行,在后台/前台线程上运行,或在设计时。 (见full list here)
我现在想添加一个新标志,用于检查手机是否使用USB线连接到桌面,以防止用户报告的问题。当手机连接到Zune软件时,某些操作被阻止,例如你无法使用相机(它只会打开,然后立即关闭e.TaskResult == Microsoft.Phone.Tasks.TaskResult.Cancel)。这导致我的应用程序认为用户取消了照片,用户在应用程序无法正常工作时错过了该照片。
我想检测手机何时连接到Zune软件并提供一条消息,说明相机在断开连接之前无法工作。有没有办法做到这一点?
答案 0 :(得分:3)
Gabor Dolhai在Zune Detection and Network Awareness上有一篇完整的博客文章,其中结合了NetworkInterfaceType检测和NetworkAddressChanged事件。
答案 1 :(得分:1)
测试NetworkInterfaceType是以太网让你关闭,但不完全 - 因为这对连接的Zune与WPConnect的状态不敏感。此外,读取NetworkInterfaceType也可以证明是less than a walk in the park。
处理生成的异常似乎是可靠的方法,但是异常确实在某些媒体API之间有所不同,因此请密切注意。
答案 2 :(得分:1)
在回顾了Mike和Derek的答案后,我决定使用一个简单的计时器来检测CameraCaptureTask
何时返回的速度比预期的要快。这可以通过在调用之前添加以下权限来启动捕获任务:
State["CameraCaptureStart"] = DateTime.Now;//Save start time to detect fast cancel from zune software
然后当捕获完成时,您可以检测它是否返回得太快:
//Detect if task returned too fast
if (State.ContainsKey("CameraCaptureStart"))
{
DateTime dtStart = (DateTime)State["CameraCaptureStart"];
TimeSpan ts = DateTime.Now - dtStart;
if (ts < TimeSpan.FromSeconds(3))
{
MessageBox.Show("Error: Camera does not work while phone is connected to the Zune software.");
}
}
在我的测试中,最快的我可以加载相机,拍照,并按下接受按钮大约5-6秒,其中Zune软件会自动取消并在2.5秒后返回。
这种方法很简单,适用于我的情况,但是你应该知道如果用户在3秒超时之前按下后退按钮,也会显示错误信息。