2017-08-09 319 views
0

我正在用Unity和Tango SDK開發一個Tango應用程序,但是,我需要能夠檢查設備的Wifi連接並相應地連接到Wifi網絡。由於這一點,我開始研究Android Unity網絡插件,但我在檢查設備的連接性時遇到麻煩;即使Wifi已打開且設備已連接至Wifi網絡,getActiveNetwork仍會返回空值。Android getActiveNetwork總是返回null

我花了幾天的時間搜索解決方法或替代實現,但找不到任何可行的代碼,下面是我查看了許多Android連接相關後用於執行檢查的代碼我看過的問題以及我在清單中使用的所有權限。

(我想指出的是,目前我正在返回一個整數爲手段,以快速調試功能時,通過Unity C#腳本調用,而現在該函數總是返回0)

public int IsConnectedToWifi(){ 

     //SCCActivity activity = new SCCActivity(); 
     ConnectivityManager cm = (ConnectivityManager) this.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
     if(cm == null) return -2; 
     NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 


     if (activeNetwork != null) { // connected to the internet 
      if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { 
       // connected to wifi 
       DebugToast(activeNetwork.getTypeName()); 
       return 1; 
       //return activeNetwork.isConnected(); 
      } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { 
       // connected to the mobile provider's data plan 
       DebugToast(activeNetwork.getTypeName()); 
       return 2; 
       //return false; 
      } 
     } 
     else { 
      DebugToast("There is no active Network"); 
      return 0; 
      //return false; 
     } 

     DebugToast("Failed to get a Connectivity Manager"); 
     return -1; 
     //return false; 
    } 

在AndroidManifest文件中:

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 

我真的很感激任何建議或指導,謝謝。

回答

0

在進一步調試並查看類似案例後,我發現並解決了該問題。

我會在這裏留下我的解決方案,以防其他人遇到類似問題。

基本上,getActiveNetwork是不是真的返回null可言,事實證明,即使該權限是對XML列,「android.permission.ACCESS_NETWORK_STATE」從未授權和功能被扔了一個異常。問題的原因是,正如我之前提到的,我正在使用Tango SDK for Unity開發Tango應用程序,Tango SDK提供的xml覆蓋了Java插件中的xml。

解決方案很簡單;我只是將權限添加到了Tango SDK的xml中。

0

嘿,我不知道你是否真的想檢查手機是連接到WIFI還是MOBILE_INTERNET。

但如果你只是要檢查,如果手機有連接 比下面的代碼爲我工作得很好

public static final boolean isNetworkAvailable(Context context) { 

    boolean connected = false; 
    ConnectivityManager connectivityManager = 
      (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo nf = connectivityManager.getActiveNetworkInfo(); 
    if (nf != null && (nf.isConnected() || nf.isConnectedOrConnecting())) { 
     // we are connected to a network 
     connected = true; 
    } else 
     connected = false; 

    return connected; 
} 
+0

嘿,謝謝你的回覆!我只是測試了代碼,但結果相同,即使設備連接到網絡,getActiveNetworkInfo仍然返回null,並且由於nf始終爲空,函數也會返回false。 – Geoab

+0

@Geoab您在模擬器或真實設備中檢查!你連接到WIFI? – AJay

+0

我正在檢查真實設備,並且設備已連接到WIFI – Geoab

0

我一直在與奇巧及更高版本的設備成功地利用這一點:

public static boolean isConnectedWifi(Context context){ 
    NetworkInfo info = Connectivity.getNetworkInfo(context); 
    return (info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_WIFI); 
} 

我也在過去將它與ConnectivityManager.TYPE_MOBILE進行了比較,但不記得它的工作效果有多好。

+0

感謝您的回覆。我試圖測試你的代碼,但我得到了「無法解析連接符號」錯誤,連接不是android.net.ConnectivityManager包的一部分嗎?我需要導入一個不同的包嗎? – Geoab

+0

我的不好,我確定這是香草android代碼,但實際上連接是在我的項目中創建的。它最終所做的就是像您嘗試的那樣調用getActiveNetworkInfo。我將很快刪除這個答案,因爲它沒有添加任何東西。 – Fabio