¿Cómo obtener la dirección IP del dispositivo peer en Android para WiFi-Direct (WiFi-P2P)?

Estoy tratando de implementar el WiFi-Direct(WiFi-P2P) en Android. Tengo referenciar el código de la muestra en samples\android-19\legacy\WiFiDirectDemo .

WiFiDirectDemo.apk en el phone-A y lo ejecuto. El phone-B activa el WiFi-Direct(WiFi-P2P) en la Android Setting .

Después de que el phone-A conecte al teléfono-B , muestra la siguiente información en el phone-A .

introduzca la descripción de la imagen aquí

Y el código es como el siguiente:

 @Override public void onConnectionInfoAvailable(final WifiP2pInfo info) { Log.d(WifiP2P.TAG, "onConnectionInfoAvailable----------- " + info); if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } this.info = info; this.getView().setVisibility(View.VISIBLE); // The owner IP is now known. TextView view = (TextView) mContentView.findViewById(R.id.group_owner); view.setText(getResources().getString(R.string.group_owner_text) + ((info.isGroupOwner == true) ? getResources().getString(R.string.yes) : getResources().getString(R.string.no))); // InetAddress from WifiP2pInfo struct. view = (TextView) mContentView.findViewById(R.id.device_info); view.setText("Group Owner IP - " + info.groupOwnerAddress.getHostAddress()); // After the group negotiation, we assign the group owner as the file // server. The file server is single threaded, single connection server // socket. if (info.groupFormed && info.isGroupOwner) { new FileServerAsyncTask(getActivity(), mContentView.findViewById(R.id.status_text)) .execute(); } else if (info.groupFormed) { // The other device acts as the client. In this case, we enable the // get file button. mContentView.findViewById(R.id.btn_start_client).setVisibility(View.VISIBLE); ((TextView) mContentView.findViewById(R.id.status_text)).setText(getResources() .getString(R.string.client_text)); } // hide the connect button mContentView.findViewById(R.id.btn_connect).setVisibility(View.GONE); } 

El phone-A es Group Owner . Y quiero enviar datos TCP desde el phone-A al phone-B .

1. ¿Cómo obtengo la dirección IP del phone-B ? ?

2. ¿Es la Group Owner IP del Group Owner IP la IP address de Phone-A

2, Sí, esa es la dirección IP de Phone-A.

1, con esta dirección Phone-B puede enviar un mensaje a Phone-A. En el teléfono-Un dispositivo, puede leer la dirección IP del remitente (teléfono-B) desde el zócalo, después de Phone-A capturó el mensaje de Phone-B.

Para obtener la dirección IP, tiene que utilizar el siguiente método.

  public static String getIpAddress() { try { List<NetworkInterface> interfaces = Collections .list(NetworkInterface.getNetworkInterfaces()); /* * for (NetworkInterface networkInterface : interfaces) { Log.v(TAG, * "interface name " + networkInterface.getName() + "mac = " + * getMACAddress(networkInterface.getName())); } */ for (NetworkInterface intf : interfaces) { if (!getMACAddress(intf.getName()).equalsIgnoreCase( Globals.thisDeviceAddress)) { // Log.v(TAG, "ignore the interface " + intf.getName()); // continue; } if (!intf.getName().contains("p2p")) continue; Log.v(TAG, intf.getName() + " " + getMACAddress(intf.getName())); List<InetAddress> addrs = Collections.list(intf .getInetAddresses()); for (InetAddress addr : addrs) { // Log.v(TAG, "inside"); if (!addr.isLoopbackAddress()) { // Log.v(TAG, "isnt loopback"); String sAddr = addr.getHostAddress().toUpperCase(); Log.v(TAG, "ip=" + sAddr); boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr); if (isIPv4) { if (sAddr.contains("192.168.49.")) { Log.v(TAG, "ip = " + sAddr); return sAddr; } } } } } } catch (Exception ex) { Log.v(TAG, "error in parsing"); } // for now eat exceptions Log.v(TAG, "returning empty ip address"); return ""; } public static String getMACAddress(String interfaceName) { try { List<NetworkInterface> interfaces = Collections .list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface intf : interfaces) { if (interfaceName != null) { if (!intf.getName().equalsIgnoreCase(interfaceName)) continue; } byte[] mac = intf.getHardwareAddress(); if (mac == null) return ""; StringBuilder buf = new StringBuilder(); for (int idx = 0; idx < mac.length; idx++) buf.append(String.format("%02X:", mac[idx])); if (buf.length() > 0) buf.deleteCharAt(buf.length() - 1); return buf.toString(); } } catch (Exception ex) { } // for now eat exceptions return ""; /* * try { // this is so Linux hack return * loadFileAsString("/sys/class/net/" +interfaceName + * "/address").toUpperCase().trim(); } catch (IOException ex) { return * null; } */ } 
  • Descubrimiento del servicio directo WiFi de Android y duración de la batería
  • ¿Es posible eliminar los grupos Wifi Direct de Android programados?
  • ¿Puedo cambiar el propietario del grupo en un grupo persistente en Wi-Fi Direct?
  • Problemas con la API Wi-Fi Direct de android: mChannel = mManager.initialize ()
  • ¿Cómo ser notificado cuando un compañero ya no está disponible en la gama Wi-Fi Direct?
  • Intención de abrir la configuración Wi-Fi Direct
  • Conectarse a dispositivos Android utilizando wifi directo sin necesidad de ayuda
  • Comunicación de clientes / pares con wifi-direct en la plataforma Android
  • Android Wi-Fi Direct leer la intensidad de la señal rssi
  • Conexión de varios dispositivos y transferencia de datos a través de Wifi Direct sin punto de acceso
  • Asignación de la dirección IP del propietario del grupo Wifi Direct en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.