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 地址?

Android通过ADB查看wifi密码

如何在同一网络上以编程方式获取其他支持Wifi的设备的IP地址?

同一路由器上的Android wifi设备通信

android 如何获取连接wifi热点的设备数量

android 如何获取连接wifi热点的设备数量