android 代码怎么实时拿到连接当前wifi热点的设备信息

android 代码怎么实时拿到连接当前wifi热点的设备信息,第1张

WifiManager wifi_service = (WifiManager) getSystemService(WIFI_SERVICE);WifiInfo wifiinfo = wifi_servicemask + ""); Logv("dns1", dhcpinfodns1 + ""); Logv("dns1", dhcpinfodns2 + ""); Logv("serverAddress", dhcpinfoserverAddress + "");

如果不想了解,请直接伸手 : android 获取局域网IP与MAC 地址(精简)

开始理清思路:主要使用 linux 两个命令(2017-07-21 fix:这个思路不好,后面使用udp取代毫秒级)

ping: 查询某个ip是否被设备占用

cat  :文本输出命令(其实可以使用 arp,但手机需要root权限)

ping:这个我就不说了,实在不知道的,这次度娘不会骗你的。主要讲讲 arp:这里只简单的介绍,推荐一篇博文: Android 平台上的 ARP 和 ARP欺骗 。我们的cat命令主要为了输出手机本地ARP缓存表, ARP命令 可用于查询本机ARP缓存中IP地址和 MAC地址 的对应关系

可以看到我们电脑中缓存的 ip地址与对应的mac地址,但我们手机上又要怎么获得呢?

哈哈其实到这里基本就结束了,也不算什么详解,目前这个方法还有个缺陷就是,耗时比较长,我计算了一下大概得花10秒才能得到局域网内的所有存在的ip与对应的mac。

还有待改善,其实想先取arp缓存,然后把arp中没有的ip地址通过ping测试,然后再取arp缓存,这样可以减少一部分的ping测试线程,但为了保证arp中ip对应的mac永远是新的,只能每次都循环ping测试所有网段内的ip。如果有更好的想法,希望来怼我。

改变思路:使用udp来替代原先多线程ping

具体怎么玩我就不写了,他人的思路,抄袭过来,有损我英俊的形象,写的还是比较好的。

Android 单线程也能极速刷新并获取局域网设备(IP+MAC)信息, 从4分30S 优化到 0150S 不是梦

如果觉得他的用起来麻烦,我的IpScanner类也更新了,可以直接copy使用,还是简单的。 

奉上项目地址: IpSanner (一个类一个回调就搞定了,简单的)

1使用WIFI

首先设置用户权限

Xml代码

<uses-permission android:name="androidpermissionACCESS_WIFI_STATE"></uses-permission>

<uses-permission android:name="androidpermissionCHANGE_WIFI_STATE"></uses-permission>

<uses-permission android:name="androidpermissionWAKE_LOCK"></uses-permission>

其次,代码如下

Java代码

public void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutmain);

//获取wifi服务

WifiManager wifiManager = (WifiManager) getSystemService(ContextWIFI_SERVICE);

//判断wifi是否开启

if (!wifiManagerisWifiEnabled()) {

wifiManagersetWifiEnabled(true);

}

WifiInfo wifiInfo = wifiManagergetConnectionInfo();

int ipAddress = wifiInfogetIpAddress();

String ip = intToIp(ipAddress);

EditText et = (EditText)findViewById(RidEditText01);

etsetText(ip);

}

private String intToIp(int i) {

return (i & 0xFF ) + "" +

((i >> 8 ) & 0xFF) + "" +

((i >> 16 ) & 0xFF) + "" +

( i >> 24 & 0xFF) ;

}

2使用GPRS

首先,设置用户上网权限

Xml代码

<uses-permission android:name="androidpermissionINTERNET"></uses-permission>

其次,代码如下

Java代码

public String getLocalIpAddress()

{

try

{

for (Enumeration<NetworkInterface> en = NetworkInterfacegetNetworkInterfaces(); enhasMoreElements();)

{

NetworkInterface intf = ennextElement();

for (Enumeration<InetAddress> enumIpAddr = intfgetInetAddresses(); enumIpAddrhasMoreElements();)

{

InetAddress inetAddress = enumIpAddrnextElement();

if (!inetAddressisLoopbackAddress())

{

return inetAddressgetHostAddress()toString();

}

}

}

}

catch (SocketException ex)

{

Loge("WifiPreference IpAddress", extoString());

}

return null;

}

以上就是关于android 代码怎么实时拿到连接当前wifi热点的设备信息全部的内容,包括:android 代码怎么实时拿到连接当前wifi热点的设备信息、android 获取局域网IP与MAC 地址 毫秒级(详解)、android怎么获取手机ip地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9335814.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存