我正在使用 LoadingView(带有 UIActivityIndicatorView 的自定义 UIAlertView)来显示不同的状态。这是加载视图代码:
public class LoadingView : UIAlertView
{
private UIActivityIndicatorView _activityView;
public void Show (string title_)
{
Title = title_;
_activityView = new UIActivityIndicatorView (UIActivityIndicatorViewStyle.WhiteLarge);
_activityView.Frame = new System.Drawing.RectangleF (122, 50, 40, 40);
AddSubview (_activityView);
InvokeOnMainThread (delegate() {
_activityView.StartAnimating ();
});
UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
Show ();
}
public void SetTitle (string title_)
{
Title = title_;
}
public void Hide ()
{
UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false;
DismissWithClickedButtonIndex (0, true);
}
}
我也在使用地理定位。为此,用户需要网络连接、运营商数据或 wifi 网络。因此,我的应用需要验证网络是否可用。
所以,我添加了Reachability 类。我使用 InternetConnectionStatus 方法:
public static NetworkStatus InternetConnectionStatus ()
{
NetworkReachabilityFlags flags;
bool defaultNetworkAvailable = IsNetworkAvailable (out flags);
if (defaultNetworkAvailable) {
if ((flags & NetworkReachabilityFlags.IsDirect) != 0) {
return NetworkStatus.NotReachable;
}
} else if ((flags & NetworkReachabilityFlags.IsWWAN) != 0) {
return NetworkStatus.ReachableViaCarrierDataNetwork;
} else if (flags == 0) {
return NetworkStatus.NotReachable;
}
return NetworkStatus.ReachableViaWiFiNetwork;
}
我这样测试它:
partial void BtnLocationClick()
{
loading = new LoadingView();
loading.Show("Looking for network");
Console.WriteLine("Looking for network");
if (Reachability.InternetConnectionStatus() != NetworkStatus.NotReachable)
{
loading.SetTitle("Network found");
loading.Hide();
// code here
}
else
{
loading.Hide();
UIAlertView alert = new UIAlertView("Error",
"No network",
null, "Retour", null);
alert.Show();
}
}
最后,很快找到了网络(感谢 InternetConnectionStatus 方法中的 Console),但是在网络检测之前声明并应该显示的 LoadingView 被冻结。
当根本没有网络(没有数据也没有wifi)时,它是完美的。它显示正确。但是当我有一些网络时,它会冻结。然后,很长一段时间后,我可以看到“找到网络”并且事情正常进行。
我完全不明白发生了什么。你有什么主意吗 ?
提前感谢您提供的帮助。