android 如何获取同一WiFi下的所有连接终端
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 如何获取同一WiFi下的所有连接终端相关的知识,希望对你有一定的参考价值。
编程思路
import android.app.Activity;import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.widget.TextView;
/**
* 获取手机WIFI的MAC地址
* @author 单红宇
*
*/
public class GetmacipinfoActivity extends Activity
/** Called when the activity is first created. */
private static final int REQUEST_ENABLE_BT = 3;
private WifiManager mWifi;
private BluetoothAdapter bAdapt;
private String btMac;
private String WifiMac;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
if (!mWifi.isWifiEnabled())
mWifi.setWifiEnabled(true);
WifiInfo wifiInfo = mWifi.getConnectionInfo();
bAdapt = BluetoothAdapter.getDefaultAdapter();
if (bAdapt != null)
if (!bAdapt.isEnabled())
Intent enBT = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enBT, REQUEST_ENABLE_BT);
btMac = bAdapt.getAddress();
else
btMac = "No Bluetooth Device!";
if ((WifiMac = wifiInfo.getMacAddress()) == null)
WifiMac = "No Wifi Device";
TextView mac = (TextView) findViewById(R.id.macView);
mac.setTextSize(16);
// 查看已经连接上的WIFI信息,在Android的SDK中为我们提供了一个叫做WifiInfo的对象,这个对象可以通过WifiManager.getConnectionInfo()来获取。WifiInfo中包含了当前连接中的相关信息。
// getBSSID() 获取BSSID属性
// getDetailedStateOf() 获取客户端的连通性
// getHiddenSSID() 获取SSID 是否被隐藏
// getIpAddress() 获取IP 地址
// getLinkSpeed() 获取连接的速度
// getMacAddress() 获取Mac 地址
// getRssi() 获取802.11n 网络的信号
// getSSID() 获取SSID
// getSupplicanState() 获取具体客户端状态的信息
StringBuffer sb = new StringBuffer();
sb.append("\\n获取BSSID属性(所连接的WIFI设备的MAC地址):" + wifiInfo.getBSSID());
// sb.append("getDetailedStateOf() 获取客户端的连通性:");
sb.append("\\n\\n获取SSID 是否被隐藏:"+ wifiInfo.getHiddenSSID());
sb.append("\\n\\n获取IP 地址:" + wifiInfo.getIpAddress());
sb.append("\\n\\n获取连接的速度:" + wifiInfo.getLinkSpeed());
sb.append("\\n\\n获取Mac 地址(手机本身网卡的MAC地址):" + WifiMac);
sb.append("\\n\\n获取802.11n 网络的信号:" + wifiInfo.getRssi());
sb.append("\\n\\n获取SSID(所连接的WIFI的网络名称):" + wifiInfo.getSSID());
sb.append("\\n\\n获取具体客户端状态的信息:" + wifiInfo.getSupplicantState());
mac.setText("WIFI网络信息: " + sb.toString() + "\\n\\n蓝牙MAC: " + btMac);
看下这段代码或许对你有帮助!!追问
不是这个功能。我希望得到的是同一WiFi下的多有终端信息,例如 SSID为:WiFi 的WiFi下连接了三个手机,一台电脑。
参考技术A 想问 您这个问题解决了吗? 最近我也碰到这么一个需求 参考技术B 你解决这个问题没有楼主,我也有这个需求 急急急 QQ815541014 谢谢如何在 WiFi Direct 中获取非群组所有者的 IP 地址?
【中文标题】如何在 WiFi Direct 中获取非群组所有者的 IP 地址?【英文标题】:How to get the IP address of a non-group owner in WiFi Direct? 【发布时间】:2012-10-18 03:05:51 【问题描述】:如果提议连接的设备被指定为组所有者,我们如何知道其他设备的 IP 地址?我们可以得到群主的IP,但我不知道如何获取非群主的IP。因为请求连接的不是设备,所以它没有 WifiP2pInfo 类。它甚至不知道群主的IP。如何将数据从这台设备发送给群组所有者?
提前致谢!
【问题讨论】:
你得到答案了吗????如果是,请分享,我需要它。 【参考方案1】:您可以获取两个对等方的本地 IP 地址,然后将它们与组所有者 IP 进行比较。您可能已经知道,您可以通过这行代码轻松获取组所有者 IP:
WifiP2pInfo.info.groupOwnerAddress.getHostAddress();
对于本地 IP,您可以简单地使用:
localIp = getDottedDecimalIP(getLocalIPAddress());
使用以下相关方法:
private byte[] getLocalIPAddress()
try
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();)
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements();)
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress())
if (inetAddress instanceof Inet4Address)
return inetAddress.getAddress();
catch (SocketException ex)
// Log.e("AndroidNetworkAddressFactory", "getLocalIPAddress()", ex);
catch (NullPointerException ex)
// Log.e("AndroidNetworkAddressFactory", "getLocalIPAddress()", ex);
return null;
private String getDottedDecimalIP(byte[] ipAddr)
if (ipAddr != null)
String ipAddrStr = "";
for (int i = 0; i < ipAddr.length; i++)
if (i > 0)
ipAddrStr += ".";
ipAddrStr += ipAddr[i] & 0xFF;
return ipAddrStr;
else
return "null";
【讨论】:
谢谢。连接套接字时,我通过 socket.getInetAddress() 获得了 IP。 在我测试时不适用于三星 Galaxy Grand 2。无法通过这种方式获取 ip。以上是关于android 如何获取同一WiFi下的所有连接终端的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式通过 Wifi 获取连接在同一网络上的其他设备的 IP 地址?