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 程式筆記的天堂
當你看完此篇文章,如果你覺得文章不錯
可以留下鼓勵的留言~
將是我的撰寫更多相關文章的動力
文章標籤
全站熱搜
