我正在使用android wifi直接演示应用程序。在我的设备中安装后,我注意到它没有按预期工作。
我很困惑,我的设备是否支持wifi直接或wifi直接所需的特殊硬件功能?我的设备是本地沃尔顿品牌和API级别16.在阅读Android文档后,我知道在API级别14中添加的Wi-Fi Direct不需要无线接入点。
我的另一个问题是,如果在没有使用wifi创建wifi区域的地方,两个或多个设备之间相互通信。总结我的问题,我需要知道我的设备是否不支持wifi直接我做的运行wifi演示。提前谢谢。
答案 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网络。