我如何检查我的Android设备支持wifi直接?

时间:2014-05-23 11:51:01

标签: android wifi android-wifi

我正在使用android wifi直接演示应用程序。在我的设备中安装后,我注意到它没有按预期工作。

我很困惑,我的设备是否支持wifi直接或wifi直接所需的特殊硬件功能?我的设备是本地沃尔顿品牌和API级别16.在阅读Android文档后,我知道在API级别14中添加的Wi-Fi Direct不需要无线接入点。

我的另一个问题是,如果在没有使用wifi创建wifi区域的地方,两个或多个设备之间相互通信。总结我的问题,我需要知道我的设备是否不支持wifi直接我做的运行wifi演示。提前谢谢。

5 个答案:

答案 0 :(得分:12)

你应该以这种方式检查,因为有些设备不支持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;
}

答案 1 :(得分:2)

StoneLam's answer之外,这可能是最强大的,如果支持WiFi Direct,则可以采用更快更脏的方法来调用WifiP2pManager.discoverPeers()。后者需要ActionListener进行onFailure()回调。传递给onFailure(int reason)的失败原因可以是P2P_UNSUPPORTED,这可以回答您的问题:设备不支持WiFi Direct。

拨打onSuccess()表示设备支持支持WiFi Direct。对onFailure()的其他失败原因的调用可能对设备的功能没有定论。

答案 2 :(得分:1)

Android 4.0及更高版本支持Wi-Fi Direct。但是,由于它的WiFi驱动程序

,一些4.x设备不支持Wi-Fi Direct

您可以使用以下代码检查您的设备

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

如果您的设备支持Wi-Fi Direct,稍后会调用onSuccess。否则,将调用onFailure

答案 3 :(得分:0)

在API 21之上,您可以直接从WifiManager类使用isP2pSupported ()。 对于较低的Api,您可以使用PackageManager类,

if(getPackageManager().hasSystemFeature("android.hardware.wifi.direct"))

//Wifi direct available

答案 4 :(得分:-1)

检查是否支持Wifi P2P:

  • 在代码中:如果您无法获得系统服务,则不支持

    mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
    
  • 没有代码:检查该选项是否在“设置”应用中(在Wifi下)

根据您的第二个问题:是的,通过wifi连接的设备直接通信,没有任何现有的WiFi网络。