WiFi直上豆形软糖,WPA请求者搞砸(WiFi-Direct on JellyBean, WPA

2019-07-31 07:22发布

所以几个月前,我已经开始开发一些WiFi直连应用程序。 前几天,我都更新我的Galaxy Nexus到果冻豆(4.1.x版)和测试我的应用程序,但它好像有什么东西又搞砸了。它已经在一个痛苦的屁股让主功能集上了ICS,但现在不工作了。

我得到的是这样的事情在我的logcat:

/wpa_supplicant(  392): p2p0: P2P-PROV-DISC-PBC-REQ a2:0b:ba:xy:zz:xx p2p_dev_addr=a2:0b:ba:xy:zz:xx pri_dev_type=10-0050F204-x name='Android_e9f0' config_methods=0x188 dev_capab=0x27 group_capab=0x0
I/wpa_supplicant(  392): p2p0: P2P-DEVICE-FOUND a2:0b:ba:xy:zz:xx p2p_dev_addr=a2:0b:ba:xy:zz:xx pri_dev_type=10-0050F204-5 name='Android_e9f0' config_methods=0x188 dev_capab=0x27 group_capab=0x0
I/wpa_supplicant(  392): p2p0: P2P-GO-NEG-REQUEST a2:0b:ba:xx:zz:xy dev_passwd_id=4
I/wpa_supplicant(  392): p2p0: P2P-FIND-STOPPED 
I/wpa_supplicant(  392): p2p0: P2P-GO-NEG-FAILURE status=7
W/Netd    (  120): No subsystem found in netlink event
D/NetlinkEvent(  120): Unexpected netlink message. type=0x11
I/wpa_supplicant(  392): p2p0: P2P-DEVICE-LOST p2p_dev_addr=a2:0b:ba:xx:zz:xy
I/wpa_supplicant(  392): p2p0: P2P-DEVICE-FOUND a2:0b:ba:xx:zz:xy p2p_dev_addr=a2:0b:ba:xx:zz:xy pri_dev_type=10-0050F204-5 name='Android_e9f0' config_methods=0x188 dev_capab=0x27 group_capab=0x0

该“邀请对话框中的”正常弹出,在第二个电话,和“有时”(随机),它甚至还可以,但是只有在每个第五次尝试什么的。 所以logcat的告诉我,因为我不是专业人士,Android的实习生码,谈判只是失败,设备丢失了片刻,然后再次发现,似乎所有的有点乱了。

我的邀请被发送出去这样的:

public void onPeersAvailable(WifiP2pDeviceList peers) {
    if (isInvitationSent)
        return;
    for (WifiP2pDevice dev : peers.getDeviceList()) {
        WifiP2pConfig c = new WifiP2pConfig();
        c.deviceAddress = dev.deviceAddress;
        c.wps.setup = WpsInfo.PBC;

        if (initiator
                && !isInvitationSent
                && WiFiSupport.compareMacAddressesInsensitive(MAC_ADDRESS,
                        dev.deviceAddress)) {
            isInvitationSent = true;
            sendInvitation(c);
        }
    }
}

private void sendInvitation(final WifiP2pConfig config) {
    log("Sending invitation to " + config.deviceAddress);
    mWifiManager.connect(mChannel, config, new ActionListener() {
        @Override
        public void onSuccess() {
            log("Invitation sent!");
        }

        @Override
        public void onFailure(int reason) {
            log("Invitation failed!");
            Toast.makeText(getApplicationContext(), "Could not connect to peer, reason:"+reason, Toast.LENGTH_LONG).show();
            if (!retryChannel) {
                log("Retrying to send invitation.");
                retryChannel = true;
                sendInvitation(config);
            }
        }
    });
}

我读过很多关于WIFI直接在Android上,和它一直工作正常,直到我更新了手机果冻豆..任何人都知道,这可能是错了吗? 如果您需要更多的代码示例或代码的任何特定部分,只是告诉我,因为我不知道什么可能是可靠这一点。

谢谢您的帮助。

编辑:

改变了WifiP2pConfig.wps.setup法“显示”,这就造成了设备#1显示PIN码,设备#2弹出一个对话框,输入字段 - 输入正确的PIN这是logcat的告诉我后:

08-31 15:13:28.241: I/wpa_supplicant(384): p2p0: P2P-GO-NEG-SUCCESS 
08-31 15:13:28.241: I/wpa_supplicant(384): rfkill: Cannot open RFKILL control device
08-31 15:13:29.850: W/wpa_supplicant(384): p2p-p2p0-3: Could not connect to kernel driver
08-31 15:13:30.264: E/wpa_supplicant(384): Using interface p2p-p2p0-3 with hwaddr a2:0b:ba:x:y:z and ssid 'DIRECT-ps-Android_e9f0'
08-31 15:13:30.491: I/wpa_supplicant(384): p2p-p2p0-3: CTRL-EVENT-CONNECTED - Connection to a2:0b:ba:x:y:z completed (auth) [id=0 id_str=]
08-31 15:13:43.491: I/wpa_supplicant(384): p2p0: P2P-GROUP-FORMATION-FAILURE 
08-31 15:13:43.491: I/wpa_supplicant(384): p2p0: P2P-GROUP-REMOVED p2p-p2p0-3 GO
08-31 15:13:43.491: W/wpa_supplicant(384): p2p-p2p0-3: Could not connect to kernel driver
08-31 15:13:44.061: E/wpa_supplicant(384): Failed to remove interface (ifidx=15)
08-31 15:13:44.178: W/Netd(120): No subsystem found in netlink event
08-31 15:13:44.178: D/NetlinkEvent(120): Unexpected netlink message. type=0x11
08-31 15:13:44.248: W/Netd(120): No subsystem found in netlink event
08-31 15:13:44.248: D/NetlinkEvent(120): Unexpected netlink message. type=0x11
08-31 15:13:44.280: I/wpa_supplicant(384): p2p0: P2P-DEVICE-LOST p2p_dev_addr=a2:0b:ba:x:y:z
08-31 15:13:46.155: I/wpa_supplicant(384): p2p0: P2P-DEVICE-FOUND a2:0b:ba:x:y:z p2p_dev_addr=a2:0b:ba:x:y:z pri_dev_type=10-0050F204-5 name='Android_755f' config_methods=0x188 dev_capab=0x27 group_capab=0x0

有趣的是:08-31 15:13:43.491:W /的wpa_supplicant(384):P2P-p2p0-3:无法连接到内核驱动程序

我认为。 看起来像Android的自身的WiFi直连的框架,我的错误?

Answer 1:

为了纪念这个问题的回答,我只是复制我的“解决方案”,这一问题:

如果你在另一个wifi网络的时候,好像集团的形成不但不能像在家里的WiFi或这样..所以Android的失败来禁用它 - 因而未能通过WiFi直接连接。

我必须确保设备在WiFi网络中则没有。



Answer 2:

Android的API级别16最新的Wi-Fi Direct的API与果冻豆正如你已经知道随着ICS首次加入API等级14的核心API,在这里你可以找到关于Wi-Fi直接添加的类别,

WifiP2pDnsSdServiceInfo
WifiP2pDnsSdServiceRequest
WifiP2pServiceInfo
WifiP2pServiceRequest
WifiP2pUpnpServiceInfo
WifiP2pUpnpServiceRequest

这里有些类使用WifiP2pManager类作为参数。 你最好先看看他们自己:

http://developer.android.com/reference/android/net/wifi/p2p/nsd/package-summary.html

IMO您的应用程序可能被破坏,操纵或什么那么曾经此更新的API 16.我看你已经创建了自己的方法来发送邀请其他同行,这altough是不是真的需要了。 同行的Wi-Fi直连自动获得邀请。 因此,你可以把它处理邀请过程本身。 再次,我建议你看看这里 ,除非你以前做过。



文章来源: WiFi-Direct on JellyBean, WPA Supplicant messed up