检测Windows Phone 7是否已连接到桌面Zune软件

时间:2011-01-20 07:12:40

标签: windows-phone-7 detection zune

我已经在Windows Phone 7应用程序上工作了几个月,并且有一组有用的检测标志,用于测试代码是否在模拟器中运行,在后台/前台线程上运行,或在设计时。 (见full list here

我现在想添加一个新标志,用于检查手机是否使用USB线连接到桌面,以防止用户报告的问题。当手机连接到Zune软件时,某些操作被阻止,例如你无法使用相机(它只会打开,然后立即关闭e.TaskResult == Microsoft.Phone.Tasks.TaskResult.Cancel)。这导致我的应用程序认为用户取消了照片,用户在应用程序无法正常工作时错过了该照片。

我想检测手机何时连接到Zune软件并提供一条消息,说明相机在断开连接之前无法工作。有没有办法做到这一点?

3 个答案:

答案 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秒超时之前按下后退按钮,也会显示错误信息。