Android上的WiFi Direct工作不正常

Zac*_*ach 5 java android wifi-direct android-4.2-jelly-bean

我正在尝试使用wifi直接在android Jelly Bean 4.1.1中开发一个应用程序.如果启用了p2p,我立即打电话

mManager.discoverPeers(mChannel, actionListener);
Run Code Online (Sandbox Code Playgroud)

之后我接到了回电话

onPeersAvailable(WifiP2pDeviceList)
Run Code Online (Sandbox Code Playgroud)

我正在使用2台三星(谷歌)Nexus设备进行测试,并且两者都启用了wifi direct.但是这个回调正在返回一个空的同伴列表.但是,例如,如果我立即点击默认wifi直接界面上的搜索对等按钮,则第二个设备会触发

WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION

这个内线电话

onPeersAvailable(WifiP2pDeviceList peers)
Run Code Online (Sandbox Code Playgroud)

因为我要求同事使用该事件

mManager.requestPeers(mChannel, WifiDirectService.this);
Run Code Online (Sandbox Code Playgroud)

这次我将能够看到同行.我看了很多次.

可能的原因是什么?谢谢

Mil*_*vic 1

您应该使用发现对等方法:

manager.discoverPeers(channel, new WifiP2pManager.ActionListener() {
    @Override
    public void onSuccess() {
        ...
    }

    @Override
    public void onFailure(int reasonCode) {
        ...
    }
});
Run Code Online (Sandbox Code Playgroud)

如果发现过程成功并检测到对等点,系统会广播 WIFI_P2P_PEERS_CHANGED_ACTION 意图,您可以在广播接收器中侦听该意图以获取对等点列表。当您的应用程序收到 WIFI_P2P_PEERS_CHANGED_ACTION 意图时,您可以使用 requestPeers() 请求已发现对等点的列表。

有关完整示例,请查看:http ://developer.android.com/guide/topics/connectivity/wifip2p.html#discovering

  • 我现在陷入了类似的问题,但我根本无法获取同行列表。我在“WifiP2pManager”实例上调用“discoverPeers(..)”,并将一些消息打印到日志“onSuccess()”和“onFailure()”。他总是成功检测到对等点,但系统似乎没有广播“WIFI_P2P_PEERS_CHANGED_ACTION”。我确实注册了广播接收器,并且确实调用了“requestPeers(..)”。 (13认同)