java - 什么会导致 WifiP2pManager.connect 失败?

标签 java android wifi-direct wifip2p

我有一个执行 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)是发起者时会发生这种情况。

任何想法可能是什么问题?

最佳答案

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

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

但为什么设备不在对等列表中!?

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

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

为什么我停止了扫描?
在完成蓝牙功能后,我立即来到了 WiFi-Direct。蓝牙文档特别指出在连接到设备之前停止任何正在进行的扫描,以节省带宽并加快进程。所以我想在 WiFi-Direct 上做同样的事情。 不要那样做。

关于java - 什么会导致 WifiP2pManager.connect 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23713176/

相关文章:

android - 使用第 3 方移动应用程序开发工具开发的应用程序是否为各自市场所接受?

android - WifiP2pManager.requestPeers() 不断返回 onPeersAvailable() 中的旧节点

android - 为什么 WifiP2pService 会删除我的 Wifi Direct 组?

android - 仅在发布版本中将 screenOrientation 设置为 "portrait"

android - wifi peer-2-peer(wifi direct)组自动认证

java - 简单的 Java 数学小程序

java - 是否有记录用户操作以帮助重现错误的工具?

java - 如何对对象的数组列表进行排序

java - 使用 arquilian 测试时何时构建数据库结构?

Android Studio TFS(团队基础服务器)