我正在使用安卓wifi直连演示应用程序。在我的设备上安装后,我发现它的表现不如预期。
我感到困惑,我的设备是否支持wifi直连,还是需要特殊的硬件功能支持?我的设备是本地的沃尔顿品牌,API级别为16。阅读了安卓文档之后,我知道在API级别14中添加的Wi-Fi Direct不需要无线接入点。
我的另一个问题是,在没有创建wifi区域的地方,使用wifi直连可以让两个或多个设备相互通信吗?总之,我的问题是,如果我的设备不支持wifi直连,我该怎么运行wifi演示。提前感谢您的回答。
我正在使用安卓wifi直连演示应用程序。在我的设备上安装后,我发现它的表现不如预期。
我感到困惑,我的设备是否支持wifi直连,还是需要特殊的硬件功能支持?我的设备是本地的沃尔顿品牌,API级别为16。阅读了安卓文档之后,我知道在API级别14中添加的Wi-Fi Direct不需要无线接入点。
我的另一个问题是,在没有创建wifi区域的地方,使用wifi直连可以让两个或多个设备相互通信吗?总之,我的问题是,如果我的设备不支持wifi直连,我该怎么运行wifi演示。提前感谢您的回答。
你应该按照这种方式进行检查,因为某些设备不支持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;
}
onFailure()
回调函数的ActionListener
。传递给onFailure(int reason)的失败原因可以是P2P_UNSUPPORTED,这会回答你的问题:设备不支持WiFi Direct。
对onSuccess()
的调用意味着该设备支持WiFi Direct。对onFailure()
的其他故障原因的调用可能无法确定设备的能力。
isP2pSupported()
。对于较低版本的API,您可以使用PackageManager类。if(getPackageManager().hasSystemFeature("android.hardware.wifi.direct"))
//Wifi direct available
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
}
});
onSuccess
会在一段时间后被调用。否则,onFailure
会被调用。检查是否支持Wifi P2P:
在代码中:如果您无法获取系统服务,则不支持
mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
没有代码:检查选项是否在设置应用程序中(在Wifi下)
onFailure()
。因此,这种方法并不能真正回答问题。 - LarsH