¿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
.
- Conecte dos dispositivos a través de Wi-Fi Direct
- ¿Cómo calcular la distancia entre dos dispositivos Android? (Bluetooth preferido)
- Android y WiFi Direct - Problemas de conexión
- Android renombra el nombre del dispositivo para wifi-direct
- El descubrimiento del servicio P2P Wifi funciona intermitentemente
Después de que el phone-A
conecte al teléfono-B , muestra la siguiente información en el phone-A
.
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
- Android Wi-Fi Direct: onPeersAvailable
- Android WiFi Direct - ¿Conectar sin preguntar?
- ¿Dónde puedo obtener un proyecto de aplicación Android Wi-Fi Direct demo para ADT?
- comunicación directa rápida entre ios y android
- ¿Cómo puedo transferir archivos entre dispositivos Android mediante Wi-Fi Direct?
- Android 7.1.1 Wifi Direct no puede crear grupo
- Pasar cadena entre dos wifi directo conectado al usuario en android utilizando wifi directo?
- ¿Puedo enviar datos de Android a iPhone?
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; } */ }
- java.awt.AWTError: Toolkit no encontrado: apple.awt.CToolkit Android appengineUpdate
- Preferencia setIcon a ColorDrawable no funciona en Android 5.0 Lollipop