Java WifiP2pManager.connect有什么可能失败?

Java WifiP2pManager.connect有什么可能失败?,java,android,wifi-direct,wifip2p,Java,Android,Wifi Direct,Wifip2p,我有一个代码,可以执行Wifi P2p发现,向用户显示附近的设备,并让用户选择要连接的设备 发现按预期工作,但当我尝试实际连接到所选设备时,系统调用ActionListener.onFailure并传递“内部错误”的原因码 这是启动连接的代码: public void connectToDevice(WifiP2pDevice device) { Log.i(TAG, "Initiating connection to " + device.deviceAddress); sto

我有一个代码,可以执行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)是启动器时,都会发生这种情况


你知道问题出在哪里吗?

在深入挖掘安卓源代码数小时后,我发现了问题所在

该错误是由
WifiP2pService
类引发的。原因是我尝试连接的设备不在内部邻近对等点列表中

但为什么该设备不在同行列表中

经过更多的挖掘,我发现当扫描完成时,对等列表被清除

因此,连接失败的是在启动连接之前调用的
stopScan()
方法。删除此线路后,连接成功建立

我为什么停止扫描?

在我完成蓝牙功能的实现后,我立即开始使用WiFi Direct。有关蓝牙的文档特别指出,在连接到设备之前,要停止任何正在进行的扫描,以节省带宽并加快过程。所以我想在WiFi Direct上也这么做不要那样做。

谢谢!当您停止发现时,您将停止设备。所以不要这样做,因为在使用蓝牙技术之后,我有着完全相同的体验。谢谢分享。您知道在建立连接后停止扫描是否可以吗?我试过了,成功了。但我不知道是否会发生推荐或任何副作用。@this.him:我从未尝试过这样做,但如果它对你有效,那么它可能没问题。仅仅因为扫描停止而破坏连接将是一个bug。