如何从LensPicker导航到CameraCaptureTask

本文关键字:CameraCaptureTask 导航 LensPicker | 更新日期: 2023-09-27 18:35:25

我创建了一个小的示例镜头应用程序,我希望能够在默认相机应用程序中单击镜头图标时直接导航到CameraCaptureTask。在我的应用程序中,我已经在正常应用程序操作期间在按钮单击事件中调用了 CameraCaptureTask。我如何从镜头选择器选项中设置它以使其工作?

我一直在参考http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662936(v=vs.105).aspx

镜头示例UriMapper.cs

private string tempUri;
public override Uri MapUri(Uri uri)
{
    tempUri = uri.ToString();
    // Look for a URI from the lens picker.
    if (tempUri.Contains("ViewfinderLaunch"))
    {
        // Launch as a lens, launch viewfinder screen.
        return new Uri("/MainPage.xaml", UriKind.Relative);
    }
    // Otherwise perform normal launch.
    return uri;
}

我正在考虑在return new Uri("/MainPage.xaml", UriKind.Relative);中传递一个 QueryString 值,以便在我的 MainPage OnNavigatedTo 事件中我可以检查该 QueryString 值并调用 CameraCaptureTask,然后将结果路由到我创建的现有事件处理程序(在 MainPage 中显示生成的图像)。由于某种原因,我在尝试创建要传递的 QueryString 时遇到调试错误,我不确定为什么?

编辑** 不再收到错误,但在调用 CameraCapture Task 时会出现无限循环。为什么?

镜头示例UriMapper.cs

private string tempUri;
public override Uri MapUri(Uri uri)
{
    tempUri = uri.ToString();
    // Look for a URI from the lens picker.
    if (tempUri.Contains("ViewfinderLaunch"))
    {
        // Launch as a lens, launch viewfinder screen.
        return new Uri("/MainPage.xaml?fromLensPicker=" + "fromLensPicker", UriKind.Relative);
    }
    // Otherwise perform normal launch.
    return uri;
}

主页.xaml.cs

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    string fromLensPicker = null;
    if (NavigationContext.QueryString.TryGetValue("fromLensPicker", out fromLensPicker))
    {
        if (fromLensPicker == "fromLensPicker")
        {
            newButton_Click(null, null);  //click event that calls CameraCaptureTask
            fromLensPicker = null; //Temporarily nullifies value until MainPage is OnNavigatedTo after CameraCaptureTask completes
        }
    }
}

我相信,当调用CameraCaptureTask时,应用程序会被逻辑删除,然后在 MainPage 上恢复,其中QueryStringfromLensPicker == "fromLensPicker",整个循环重复地重新开始。我该如何解决这个问题?

如何从LensPicker导航到CameraCaptureTask

在主页中使用导航模式属性。我认为您无法清除查询字符串。但是您可以检查导航到页面的方式,以了解它是否从CameraCaptureTask返回

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if(e.NavigationMode == NavigationMode.New)
    // continue further
}

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if(e.NavigationMode == NavigationMode.Back)
    return;
    // else continue further
}

我现在没有在 MainPage.xaml.csfromLensPicker = null,而是从 WP7 导航中引用了带有参数的NavigationContext.QueryString.Remove("fromLensPicker")

主页.xaml.cs

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    string fromLensPicker = null;
    if (NavigationContext.QueryString.TryGetValue("fromLensPicker", out fromLensPicker))
    {
        if (fromLensPicker == "fromLensPicker")
        {
            NavigationContext.QueryString.Remove("fromLensPicker");                           
            //Perform Action           
        }
    }
}
相关文章:
  • 没有找到相关文章