所以几个月前我开始开发一些WiFi-Direct应用程序。几天前,我将我的Galaxy Nexus更新为Jelly Bean(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-intern代码,谈判失败了,设备会在短时间内丢失,然后再次被发现,似乎有点搞砸了。
我的邀请是这样发出的:
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);
}
}
});
}
我已经在android上直接阅读了很多关于wifi的内容,直到我将手机更新到果冻豆之前它一直运行良好..有谁知道,有什么可能是错的?如果您需要更多代码示例或代码的任何特定部分,请告诉我,因为我不知道什么是可靠的。
感谢您的帮助。
编辑:
将WifiP2pConfig.wps.setup方法更改为“display”,导致设备#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-direct-framework中的一个错误?
答案 0 :(得分:0)
要将此问题标记为已回答,我只需复制我的解决方案"这个问题:
如果您在另一个无线网络中,例如在您的家庭wifi或类似网络中,组织形成似乎只会失败..因此Android无法禁用它 - 因此无法通过WiFi Direct连接。
我必须确保设备不在wifi网络中。
答案 1 :(得分:-1)
Android使用API级别16的Jelly Bean更新了Wi-Fi Direct API。您已经知道核心API首先与API级别14中的ICS一起添加。您可以在此找到有关Wi-Fi Direct的附加类,< / p>
WifiP2pDnsSdServiceInfo
WifiP2pDnsSdServiceRequest
WifiP2pServiceInfo
WifiP2pServiceRequest
WifiP2pUpnpServiceInfo
WifiP2pUpnpServiceRequest
这里的一些类使用WifiP2pManager
类作为参数。你最好自己看看它们:
http://developer.android.com/reference/android/net/wifi/p2p/nsd/package-summary.html
IMO您的应用程序可能会在API 16中的此更新后被破坏,操纵或处理任何事情。我看到您已经创建了自己的方法来向其他对等方发送邀请,尽管这不是真正需要的。同行会在Wi-Fi Direct中自动收到邀请。因此,您可以让它自己处理邀请过程。我建议你再看看here,除非你之前做过。