close

unity 該如何判斷裝置是否有正確連上網路呢?

其實最簡單就是用個www連線,是否能連線成功就解決了

不過因該有更好更有效的方式

查了一下網路 Application.internetReachability 這個可以使用

不過呢?  我個人測試的結果是只能用來行動裝置上

用來判斷是否開起連線功能而已,例如果開啟wifi網路

實際上也沒有連線成功的話,值仍是 ReachableViaLocalAreaNetwork 

所以還是得加上主動連線某個網址來判斷連線是否是正常的

也能省去一些沒開連線功能仍要做連線的IO,已結論來看是個不錯的方式。

提供 C# 腳本範例 :

  using UnityEngine;
  using System.Collections;

  public class Example_Internet : MonoBehaviour {

	public const int NotReachable = 0;					 // 沒有網路
	public const int ReachableViaLocalAreaNetwork = 1;	 // 網路Wifi,網路線。
	public const int ReachableViaCarrierDataNetwork = 2; // 網路3G,4G。

	// Use this for initialization
	void Start () {
		// IPhone, Android
		int nStatus = ConnectionStatus();
		Debug.Log("ConnectionStatus : " + nStatus);
		if( nStatus > 0 )
			Debug.Log("有連線狀態");
		else
			Debug.Log("無連線狀態");
	
		this.StartCoroutine(PingConnect());
	}

	public static int ConnectionStatus () {

		int nStatus;

		if( Application.internetReachability == NetworkReachability.NotReachable )
			nStatus = NotReachable;
		else if(  Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork )
			nStatus = ReachableViaLocalAreaNetwork;
		else if( Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)
			nStatus = ReachableViaCarrierDataNetwork;
		else
			nStatus = -1;

		return nStatus;
	}

	IEnumerator PingConnect()
	{
		//Google IP
		string googleTW = "203.66.155.50";
		//YahooTW IP
		string yahooTW = "116.214.12.74";
		//Ping網站
		Ping ping = new Ping(googleTW);

		int nTime = 0;

		while(!ping.isDone){
			yield return new WaitForSeconds(0.1f);

			if(nTime > 20)	// time 2 sec, OverTime
			{
				nTime = 0;
				Debug.Log("連線失敗 : " + ping.time);
			}
			nTime++;
		}
		yield return ping.time;

		Debug.Log("連線成功");
	}
  }

 

歡迎光臨 ~ Eg 程式筆記的天堂
當你看完此篇文章,如果你覺得文章不錯
可以留下鼓勵的留言~
將是我的撰寫更多相關文章的動力

arrow
arrow

    低調_Eg 發表在 痞客邦 留言(0) 人氣()