使用LaunchUriAsync时未触发导航事件(WP 8.1)

时间:2014-08-19 17:43:59

标签: windows-phone-8.1 c++-cx

由于无法以编程方式激活蓝牙,我提示用户自己动手并使用此方法打开所需的设置页面:

auto uri = ref new Windows::Foundation::Uri("ms-settings-bluetooth:");

    concurrency::create_task(Windows::System::Launcher::LaunchUriAsync(uri)).then([](bool success)
    {
        if (success)
        {
            //URI launched
            OutputDebugString(L"Successfully launched settings from URI.\n");
        }
        else
        {
            ...
        }
    });

但是,我需要知道用户何时回到我的应用程序,因此我可以检查蓝牙是否已被激活,但LaunchUriAsync不会触发任何导航事件,如OnNavigatedTo。等待这项任务也不起作用(在我的情况下也没有意义,因为一旦设置显示它就会完成)。

那么,是否有可能检测到用户实际回来的时间?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。 关闭位置服务后,我要求用户打开位置服务,应用程序会打开位置设置。

当用户从设置中导航回来时,我希望应用加载基于位置的消息。

我创建了一个解决方案,我使用了一个运行1分钟的while循环(用户有1分钟打开位置服务)

这是我在C#中的代码

await Launcher.LaunchUriAsync(new Uri("ms-settings-location:"));

bool keepRunning = true;
int timesOfRunning = 0;
while (keepRunning)
{
    timesOfRunning++;
    if (timesOfRunning < 21)
    {
        await Task.Delay(TimeSpan.FromSeconds(3));
        GeoLocationHelper geoLocation = new GeoLocationHelper();
        if (geoLocation.IsLocationServiceEnabled)
        {
            keepRunning = false;
            await RefreshMessages();
        }
    }
    else
        keepRunning = false;
}