1

Wifi-directAndroidを使用して 2 つの P2p デバイスを接続しようとしています。permissions必要なものがすべて揃っていることを確認し、Broadcast Receiver登録しました。しかし、それでも私はWIFI_P2P_CONNECTION_CHANGED_ACTIONアクションを聞いていません。この問題を解決する方法を提案するか、他の解決策を提案してください。ありがとうございました。

4

1 に答える 1

5

ドキュメント[1]に示されているように、この方法で接続を実装できます。

 public void connect() {

    WifiP2pConfig config = new WifiP2pConfig();
    config.deviceAddress = "DEVICE_TO_CONNECT_MAC_ADDRESS";
    config.wps.setup = WpsInfo.PBC;

    mManager.connect(mChannel, config, new ActionListener() {

        @Override
        public void onSuccess() {
            // WiFiDirectBroadcastReceiver will notify us. Ignore for now.
        }

        @Override
        public void onFailure(int reason) {
            Toast.makeText(WiFiDirectActivity.this, "Connect failed. Retry.",
                    Toast.LENGTH_SHORT).show();
        }
    });
}

その後、次のように WifiP2pManager のインスタンスを使用して接続情報を要求するために、BroadcastReceiver を変更します。

if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {

    if (mManager == null) {
         return;
    }
    NetworkInfo networkInfo = (NetworkInfo) intent
               .getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);

    if (networkInfo.isConnected()) {
         // We are connected with the other device, request connection
         // info to find group owner IP

         mManager.requestConnectionInfo(mChannel, connectionListener);
    }
}

このブロックは、WIFI_P2P_CONNECTION_CHANGED_ACTION インテントをリッスンする BrodacastReceiver に実装する必要があります。

次に、インターフェイス WifiP2pManager.ConnectionInfoListener[2] を実装します。

@Override
public void onConnectionInfoAvailable(final WifiP2pInfo info) {

    // InetAddress from WifiP2pInfo struct.
    InetAddress groupOwnerAddress = info.groupOwnerAddress.getHostAddress());

    // After the group negotiation, we can determine the group owner.
    if (info.groupFormed && info.isGroupOwner) {
        // Do whatever tasks are specific to the group owner.
        // One common case is creating a server thread and accepting
        // incoming connections.
    } else if (info.groupFormed) {
        // The other device acts as the client. In this case,
        // you'll want to create a client thread that connects to the group
        // owner.
    }
}

この助けを願っています。:)

[1] - http://developer.android.com/training/connect-devices-wireless/wifi-direct.html#connect

[2] - http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ConnectionInfoListener.html

于 2012-11-20T17:16:44.410 に答える