java什么东西可能会失败WifiP2pManager。连接
我有一个代码,可以执行Wifi P2p发现,向用户显示附近的设备,并让用户选择要连接的设备
发现工作正常,但当我尝试实际连接到所选设备时,系统调用ActionListener.onFailure
,并传递“内部错误”的原因码
这是启动连接的代码:
public void connectToDevice(WifiP2pDevice device) {
Log.i(TAG, "Initiating connection to " + device.deviceAddress);
stopScan();
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = device.deviceAddress;
config.wps.setup = WpsInfo.PBC;
// Since we wish to send a friend request, it will be easier if
// we'll end up as a client because we will have the group owner's
// address immediately.
config.groupOwnerIntent = 0;
mP2pManager.connect(mChannel, config, mConnectionListener);
}
并且mConnectionListener
定义如下:
protected ActionListener mConnectionListener = new ActionListener() {
@Override
public void onSuccess() {
Log.i(TAG, "Conection initiated successfuly");
}
@Override
public void onFailure(int reason) {
String reasonString = reason(reason);
Log.e(TAG, "Error while connecting to Wifi peer: " + reasonString);
}
};
当抛出此错误时,设备不属于任何组,并且当任何一个设备(Nexus 4和Nexus 7)是启动器时,都会发生这种情况
你知道有什么问题吗
# 1 楼答案
在深入挖掘安卓系统的源代码几个小时后,我发现了这个问题
该错误是由
WifiP2pService
类引发的。原因是我试图连接的设备不在内部邻居列表中但为什么该设备不在同行名单上呢
经过更多的挖掘,我发现扫描完成后,对等列表被清除
因此,连接失败的是
stopScan()
方法,我在启动连接之前调用了该方法。删除此线路后,连接成功建立我为什么停止扫描
在我完成蓝牙功能的实现后,我立即开始使用WiFi Direct。有关蓝牙的文档特别指出,在连接到设备之前,要停止任何正在进行的扫描,以节省带宽并加快过程。所以我想在WiFi Direct上也这么做<不要那样做