2014-05-23 67 views
3

我正在使用android wifi直接演示應用程序。在我的設備中安裝後,我注意到它沒有按預期工作。我如何檢查我的android設備支持wifi直接?

我很困惑,我的設備是否支持WiFi直接或特殊硬件功能所需的WiFi直接?我的設備是本地walton品牌和API級別16.在閱讀android文檔後,我知道添加API級別14的Wi-Fi Direct不需要無線接入點。

我的另一個問題是,如果在一個沒有使用wifi直接創建wifi區域的地方,兩個或多個設備可以相互通信。在總結我的問題,我需要知道,如果我的設備不支持WiFi直接我做什麼來運行無線演示。提前致謝。

回答

0

檢查,如果無線上網的P2P支持:

  • 在代碼:如果你不能得到系統服務,它不支持

    mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); 
    
  • 無代碼:檢查該選項是否處於設置應用程序(在Wifi下)

根據您的第二個問題:是的,設備連接通過wifi直接通信,沒有任何現有的無線網絡。

+2

模擬器不應該支持P2P,但當我檢查mManager時它不會返回null。 – Brendan

1

Android 4.0及更高版本支持Wi-Fi Direct。然而,一些4.x的設備不支持WiFi直接因爲它的WiFi驅動程序

可以使用代碼檢查以下

mManager.discoverPeers(mChannel, new ActionListener() { 
      @Override 
      public void onSuccess() { 
       //onSuccess 
      } 
      @Override 
      public void onFailure(int reason) { 
       //onFailure 
      } 
}); 

設備如果您的設備支持WiFi直連,onSuccess稍後會被調用。否則,將調用onFailure

+0

真的嗎?例如,如果設備支持WiFi Direct,但WiFi已關閉,那麼肯定可以調用onFailure()。所以這種方法並沒有真正回答這個問題。 – LarsH

9

你應該這樣檢查,因爲有些設備不支持WiFi直接但仍然保留WifiP2pManager代碼的框架。

private boolean isWifiDirectSupported(Context ctx) { 
    PackageManager pm = ctx.getPackageManager(); 
    FeatureInfo[] features = pm.getSystemAvailableFeatures(); 
    for (FeatureInfo info : features) { 
     if (info != null && info.name != null && info.name.equalsIgnoreCase("android.hardware.wifi.direct")) { 
      return true; 
     } 
    } 
    return false; 
} 
+0

這個答案應該被接受 – user3290180

2

除了StoneLam's answer,這可能是最強大的,更快,和骯髒的方法是繼續前進,並呼籲WifiP2pManager.discoverPeers(),你會如果直接WiFi的支持。後者採取ActionListeneronFailure()回調。傳遞給onFailure(int reason)的失敗原因可能是P2P_UNSUPPORTED,這可以回答你的問題:設備不支持WiFi Direct。

撥打電話onSuccess()意味着設備確實支持WiFi Direct。由於其他故障原因致電onFailure()可能無法確定設備的功能。