5

そのため、数か月前に、いくつかの 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

「招待ダイアログ」は2番目の電話で正しくポップアップし、「時々」(ランダムに)機能しますが、5回ごとに試行するか何かでのみ機能します. そのため、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 が入力フィールドを含むダイアログをポップアップ表示しました - 正しいピンを入力した後、これは 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 のバグのように見えますか?

4

2 に答える 2

0

この質問を回答済みとしてマークするには、私の「解決策」をこの問題にコピーします。

グループの形成は、自宅のwifiなどの別のwifiネットワークにいる場合にのみ失敗するようです..そのため、Androidはそれを無効にできません-したがって、WiFi Direct経由で接続できません.

デバイスが Wi-Fi ネットワークにないことを確認する必要がありました。

于 2014-04-14T10:37:41.430 に答える
-2

Android は、API レベル 16 で Jelly Bean を使用して Wi-Fi Direct API を更新しました。ご存知のように、コア API は、API レベル 14 で ICS とともに最初に追加されました。Wi-Fi Direct に関して追加されたクラスをここで見つけることができます。

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 で招待を自動的に受け取ります。したがって、招待プロセス自体を処理するままにすることができます。繰り返しますが、以前に行ったことがない限り、ここを確認することをお勧めします。

于 2012-11-14T18:56:11.057 に答える