如何处理我的 UWP 应用程序中的 Internet 可用性?
How can I handle internet availability in my UWP app?
我的应用程序使用互联网服务来获取和保存数据。如果我尝试在没有连接的情况下使用它们,我会收到错误消息。我还想向用户表明没有连接,这是必需的。
我怎样才能有效地做到这一点?
PS: 我使用Template 10框架。
要务实地处理此问题,您首先需要确保已升级到使用 Template 10 1.1.12 或更高版本。使用此版本,您不仅可以使用 NetworkAvailableService
来测试 Internet 连接,还可以测试可用的一般网络 - 取决于您的应用程序是访问本地资源的内部应用程序还是访问 Internet 资源的外部应用程序。
public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> state)
{
var net = new NetworkAvailableService();
net.AvailabilityChanged = async e =>
{
if (await net.IsNetworkAvailable())
{
// yes network
if (await net.IsInternetAvailable())
{
// yes internet
}
else
{
// no internet
}
}
else
{
// no network
}
};
}
处理问题的 UI 部分是另一个问题。您可以在视图模型中有一个 IsConnected INPC 属性,它会导致 UI 元素的可见性发生变化。或者你可以使用精彩的 NetworkConnectionStateTrigger
来改变你的视觉状态。顺便说一下,我就是这样做的。当然,这是教科书式的方法。
从https://github.com/dotMorten/WindowsStateTriggers
获取状态触发器
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="connected">
<VisualState.StateTriggers>
<triggers:NetworkConnectionStateTrigger ConnectionState = "Connected" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="MyTextBlock.Text" Value="Internet is available" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="disconnected">
<VisualState.StateTriggers>
<triggers:NetworkConnectionStateTrigger ConnectionState = "Disconnected" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="MyTextBlock.Text" Value="No internet connection"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
祝你好运!
我的应用程序使用互联网服务来获取和保存数据。如果我尝试在没有连接的情况下使用它们,我会收到错误消息。我还想向用户表明没有连接,这是必需的。
我怎样才能有效地做到这一点?
PS: 我使用Template 10框架。
要务实地处理此问题,您首先需要确保已升级到使用 Template 10 1.1.12 或更高版本。使用此版本,您不仅可以使用 NetworkAvailableService
来测试 Internet 连接,还可以测试可用的一般网络 - 取决于您的应用程序是访问本地资源的内部应用程序还是访问 Internet 资源的外部应用程序。
public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> state)
{
var net = new NetworkAvailableService();
net.AvailabilityChanged = async e =>
{
if (await net.IsNetworkAvailable())
{
// yes network
if (await net.IsInternetAvailable())
{
// yes internet
}
else
{
// no internet
}
}
else
{
// no network
}
};
}
处理问题的 UI 部分是另一个问题。您可以在视图模型中有一个 IsConnected INPC 属性,它会导致 UI 元素的可见性发生变化。或者你可以使用精彩的 NetworkConnectionStateTrigger
来改变你的视觉状态。顺便说一下,我就是这样做的。当然,这是教科书式的方法。
从https://github.com/dotMorten/WindowsStateTriggers
获取状态触发器<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="connected">
<VisualState.StateTriggers>
<triggers:NetworkConnectionStateTrigger ConnectionState = "Connected" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="MyTextBlock.Text" Value="Internet is available" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="disconnected">
<VisualState.StateTriggers>
<triggers:NetworkConnectionStateTrigger ConnectionState = "Disconnected" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="MyTextBlock.Text" Value="No internet connection"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
祝你好运!