2012-08-31 26 views
5

vì vậy một vài tháng trước, tôi đã bắt đầu phát triển một số ứng dụng WiFi-Direct. Một vài ngày trước, tôi đã cập nhật cả Galaxy Nexus của mình lên Jelly Bean (4.1.x) và đã thử nghiệm các ứng dụng của mình, nhưng có vẻ như có điều gì đó đã sai lầm một lần nữa .. Nó đã là một nỗi đau trong ass để có được bộ chức năng chính trên ICS, nhưng bây giờ nó không hoạt động nữa.Wi-Fi trực tiếp trên Jellybean, WPA Supplicant messed up

Tất cả tôi nhận được là một cái gì đó như thế này trong logcat của tôi:

/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 

Các "hộp thoại mời" bật lên một cách chính xác vào điện thoại thứ hai, và "thỉnh thoảng" (ngẫu nhiên) nó thậm chí còn hoạt động, nhưng chỉ trong mỗi thử thứ năm hay gì đó. Vì vậy, các logcat nói với tôi, vì tôi không chuyên nghiệp với mã android-intern, rằng các cuộc đàm phán chỉ đơn giản là thất bại, thiết bị bị mất trong một thời gian ngắn, và sau đó được phát hiện một lần nữa, có vẻ như tất cả các kinda sai lầm.

lời mời của tôi được gửi ra như thế này:

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); 
      } 
     } 
    }); 
} 

Tôi đã đọc rất nhiều về wifi đạo trên android, và nó đã làm việc tốt cho đến khi tôi cập nhật các điện thoại để đậu thạch .. có ai biết, những gì có thể sai? Nếu bạn cần thêm mẫu mã hoặc bất kỳ phần cụ thể nào của mã, chỉ cần cho tôi biết, vì tôi không biết điều gì có thể đáng tin cậy cho điều này.

Cảm ơn sự giúp đỡ của bạn.

EDIT:

Thay đổi phương pháp WifiP2pConfig.wps.setup để "trưng bày", dẫn đến thiết bị # 1 hiển thị một mã PIN, thiết bị # 2 nảy lên một hộp thoại với một lĩnh vực đầu vào - sau khi nhập đúng pin này là những gì logcat nói với tôi:

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 

Thú vị sẽ là: 08-31 15: 13: 43,491: W/wpa_supplicant (384): p2p-p2p0-3: không thể kết nối tới kernel lái xe

Tôi nghĩ vậy. Trông giống như một lỗi trong khuôn khổ trực tiếp wifi của Android đối với tôi?

+1

Có vẻ như hình thành nhóm chỉ thất bại nếu bạn đang ở trong một mạng wifi khác, như trong nhà của bạn wifi hoặc như vậy .. vì vậy Android không vô hiệu hóa nó - do đó không kết nối thông qua WiFi Direct. – damian

+1

Bạn có tìm thấy giải pháp nào cho điều này không? – Zach

+0

Tôi đã phát triển trên hai HTC One Vs (không thể cập nhật lên Jelly Bean do hạn chế ram) và HTC One X + (có 4.1). Theo kinh nghiệm của tôi, One Vs đã làm việc hầu hết thời gian khi One X + không hoạt động thường xuyên hơn. – Chucky

Trả lời

0

Để đánh dấu câu hỏi này như trả lời, tôi sẽ chỉ cần sao chép của tôi "giải pháp" cho vấn đề này:

Có vẻ như thành lập nhóm chỉ thất bại nếu bạn đang ở trong một mạng wifi, giống như trong wifi nhà bạn hay như vậy .. do đó Android không thể tắt nó - do đó không thể kết nối qua WiFi Direct.

Tôi phải đảm bảo rằng các thiết bị không có trong mạng wifi.

-1

API Wi-Fi Direct được cập nhật Android với Jelly Bean ở cấp API 16. Như bạn đã biết API lõi được thêm lần đầu tiên cùng với ICS ở cấp API 14. Ở đây bạn có thể tìm thấy các lớp bổ sung liên quan đến Wi-Fi Direct,

WifiP2pDnsSdServiceInfo 
WifiP2pDnsSdServiceRequest 
WifiP2pServiceInfo 
WifiP2pServiceRequest 
WifiP2pUpnpServiceInfo 
WifiP2pUpnpServiceRequest 

Một số lớp ở đây sử dụng tham số WifiP2pManager. Bạn tốt hơn hãy xem chúng mình:

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

IMO ứng dụng của bạn có thể bị hỏng, chế tác hoặc những gì-để-mãi mãi về sau bản cập nhật này trong API 16. Tôi thấy rằng bạn đã tạo ra phương pháp riêng của mình để gửi lời mời đến bạn bè khác, độ cao này không thực sự cần thiết. Các đồng nghiệp tự động nhận lời mời trong Wi-Fi Direct. Vì vậy, bạn có thể để nó xử lý chính quy trình mời. Một lần nữa, tôi đề nghị bạn hãy xem here trừ khi bạn đã làm điều đó trước đây.

+0

Không, ứng dụng của tôi vẫn hoạt động như một nét duyên dáng .. Nhưng trong API JB mới, nó trở nên tốt hơn, một số lỗi không hiển thị nữa. Đặc biệt là những người liên quan đến lái xe vốn rất khó để "bắt". – damian