LoadingView(UIActivityIndicatorViewを備えたカスタムUIAlertView)を使用して、さまざまなステータスを表示しています。LoadingViewコードは次のとおりです。
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もない場合)、それは完璧です。正しく表示されます。しかし、私がいくつかのネットワークを持っているとき、それはフリーズします。そして、久しぶりに「ネットワークが見つかりました」と表示され、正常に動作します。
何が起こっているのか全くわかりません。何か考えはありますか?
あなたが提供できる助けを事前に感謝します。