2016-11-07 58 views
3

我是Xamarin.Forms中的新成員,我想檢查iOS和Android應用中的互聯網連接狀態。事實上,使用CrossConnectivity插件,我可以成功檢查互聯網連接,但它不能用作偵聽器。例如,當我打開我的應用程序和互聯網連接不存在時,它會向我顯示「沒有互聯網連接」的消息,現在如果我打開我的移動數據,那麼它也會顯示相同的消息。我正在使用以下代碼:Xamarin.Forms中的互聯網連接監聽器

string isConnected=CrossConnectivity.Current.IsConnected?"Connected":"No Connection"; 

我的應用程序無法在中間位置收聽互聯網連接的狀態變化。

+0

我做了具體每個平臺,如果你有興趣,我可以提供一個答案,否則我不知道它是否存在XF .. –

+0

當然。我可以使用依賴服務。請給我一個相同的平臺特定的解決方案。 – Dipak

回答

3

使用插件CrossConnectivity,你要聽經時變化ConnectivityChanged,所以在您的網頁,或你的App類中添加以下代碼編寫事件處理程序:

CrossConnectivity.Current.ConnectivityChanged += (sender, args) => 
{ 
    //your implementation 
    this.DisplayAlert("Connectivity Changed", "IsConnected: " + args.IsConnected.ToString(), "OK"); 
}; 
+0

當連接改變時,這個事件是否會調用每一個事件? – Dipak

+0

我應該在哪裏聲明該事件,以便在連通性更改時觸發它? – Dipak

+0

這取決於您的需求,如果您只需在頁面可見時收聽更改,則可以在頁面的OnAppearing方法中調用它。 – Hichaam

1

我對Android的解決方案,但我還沒有開始在iOS上打工 (聊勝於無;) 首先創建一個BroadcastReceiver

public class Localize: BroadcastReceiver 
    { 
     public static Context context; 

     public Localize(Context ctx) 
     { 
      context = ctx; 
     } 
     public override void OnReceive (Context context, Intent intent) 
     { 
      isNetworkAvailable (context); 
     } 

    public void isNetworkAvailable(Context context) 
    { 
     Boolean state = false; 
     ConnectivityManager connectivity = (ConnectivityManager) 
      context.GetSystemService(Context.ConnectivityService); 
     if (connectivity != null) 
     { 
      NetworkInfo[] info = connectivity.GetAllNetworkInfo(); 
      foreach (NetworkInfo nwork in info) 
      { 
       if (nwork.GetState() == NetworkInfo.State.Connected) { 

        ConnectionDetected();//Execute your fonction here 
        break; 

       } 
      } 
     } 
    } 

然後在您的活動意圖註冊您的廣播接收器(以MainActivity例如)

IntentFilter filter = new IntentFilter(ConnectivityManager.ConnectivityAction); 
receiver = new Localize(this); 
RegisterReceiver(receiver, filter); 

這應該工作,只要你的應用程序運行。如果你想運行,即使您的應用程序被殺害,你應該創建一個服務,然後章服務ister廣播接收器在您的服務..

+0

如何檢查PCL中的連接狀態? – Dipak

+0

我是這樣做的 CrossConnectivity.Current.IsReachable(「localhost」); 它返回一個布爾值 –