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

Windows phone 7 检测Windows Phone 7是否连接到桌面Zune软件,windows-phone-7,detection,zune,Windows Phone 7,Detection,Zune,我已经在WindowsPhone7应用程序上工作了几个月了,我有一组有用的检测标志,用于测试代码是否在模拟器、后台/前台线程或设计时运行。(见附件) 我现在想添加一个新标志,用于检查手机是否使用USB电缆连接到桌面,以防止用户报告问题。当手机连接到Zune软件时,某些操作会被阻止,例如,您不能使用摄像头(它将仅打开,然后立即关闭,使用e.TaskResult==Microsoft.phone.Tasks.TaskResult.Cancel)。这导致我的应用程序认为用户取消了照片,而用户miss将

我已经在WindowsPhone7应用程序上工作了几个月了,我有一组有用的检测标志,用于测试代码是否在模拟器、后台/前台线程或设计时运行。(见附件)

我现在想添加一个新标志,用于检查手机是否使用USB电缆连接到桌面,以防止用户报告问题。当手机连接到Zune软件时,某些操作会被阻止,例如,您不能使用摄像头(它将仅打开,然后立即关闭,使用e.TaskResult==Microsoft.phone.Tasks.TaskResult.Cancel)。这导致我的应用程序认为用户取消了照片,而用户miss将其解释为应用程序无法正常工作


我想检测手机何时连接到Zune软件,并提供一条消息,说明摄像头在断开连接之前无法工作。有什么方法可以做到这一点吗?

测试NetworkInterfaceType是否为Ethernet可以让您接近,但不是很接近,因为这对连接的Zune与WPConnect的状态不敏感。此外,阅读NetworkInterfaceType也可以证明是有效的


处理由此产生的异常似乎是一种可靠的方法,但在某些媒体API中,异常似乎有所不同,因此请注意这一点。

Gabor Dolhai在,它使用NetworkInterfaceType检测和NetworkAddressChanged事件的组合。

在查看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.");
    }
}
//检测任务是否返回得太快
if(State.ContainsKey(“CameraCaptureStart”))
{
DateTime dtStart=(DateTime)状态[“CameraCaptureStart”];
TimeSpan ts=DateTime.Now-dtStart;
如果(ts
在我的测试中,我能够加载相机、拍照并按下accept按钮的最快时间大约为5-6秒,而Zune软件将在大约2.5秒后自动取消并返回


这种方法很简单,适用于我的情况,但是您应该知道,如果用户在3秒超时之前按下“后退”按钮,也会显示错误消息。

这种方法有效,似乎是迄今为止最好的解决方案,但对我的应用程序来说有点过分了。我实施了一种基于计时器的方法,这符合我当前的需求,但我会接受这一正确的总体答案。谢谢大家的提醒!真希望有一个更好的API来访问这些信息。现在我已经实现了一个简单的定时器方法来检测相机何时快速关闭。不用担心。请注意,如果考虑使用NetworkInterfaceType,它将为1。街区和2号。在某些网络环境下,可能需要很长时间才能返回(10秒的倍数)。