如何检查我的安卓设备是否支持WiFi直连?

3

我正在使用安卓wifi直连演示应用程序。在我的设备上安装后,我发现它的表现不如预期。

我感到困惑,我的设备是否支持wifi直连,还是需要特殊的硬件功能支持?我的设备是本地的沃尔顿品牌,API级别为16。阅读了安卓文档之后,我知道在API级别14中添加的Wi-Fi Direct不需要无线接入点。

我的另一个问题是,在没有创建wifi区域的地方,使用wifi直连可以让两个或多个设备相互通信吗?总之,我的问题是,如果我的设备不支持wifi直连,我该怎么运行wifi演示。提前感谢您的回答。

5个回答

13

你应该按照这种方式进行检查,因为某些设备不支持WiFi Direct,但仍在框架中保留了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;
}

2
除了StoneLam的回答,可能是最强大的方法之外,一个更快、更简单的方法是直接调用WifiP2pManager.discoverPeers(),就像支持WiFi Direct一样。后者采用一个带有onFailure()回调函数的ActionListener。传递给onFailure(int reason)的失败原因可以是P2P_UNSUPPORTED,这会回答你的问题:设备不支持WiFi Direct。

onSuccess()的调用意味着该设备支持WiFi Direct。对onFailure()的其他故障原因的调用可能无法确定设备的能力。


2
在API 21及以上版本中,您可以直接使用WifiManager类中的isP2pSupported()。对于较低版本的API,您可以使用PackageManager类。
if(getPackageManager().hasSystemFeature("android.hardware.wifi.direct"))

//Wifi direct available

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会被调用。

真的吗?如果设备支持WiFi Direct但WiFi被关闭,例如,你肯定可以调用onFailure()。因此,这种方法并不能真正回答问题。 - LarsH

-1

检查是否支持Wifi P2P:

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

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

根据您的第二个问题:是的,通过wifi直连连接的设备可以在没有任何现有wifi网络的情况下进行通信。

3
当我检查mManager时,仿真器不应支持点对点(P2P),但它没有返回null。 - Brendan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接