由于无法以编程方式激活蓝牙,我提示用户自己动手并使用此方法打开所需的设置页面:
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。等待这项任务也不起作用(在我的情况下也没有意义,因为一旦设置显示它就会完成)。
那么,是否有可能检测到用户实际回来的时间?
答案 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;
}