Android 得到连接热点的ip的方法

下面给大家介绍Android 得到连接热点的ip的方法 ,具体代码如下所示:

WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) {
System.out.println("=================");
wifiManager.setWifiEnabled(true);
}
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String IPAddress = intToIp(wifiInfo.getIpAddress());
System.out.println("IPAddress-->>" + IPAddress);
DhcpInfo dhcpinfo = wifiManager.getDhcpInfo();
String serverAddress = intToIp(dhcpinfo.serverAddress);
System.out.println("serverAddress-->>" + serverAddress);

其中IPAddress 是本机的IP地址,serverAddress 是你所连接的wifi热点对应的IP地址

private String intToIp(int paramInt)
{
return (paramInt & 0xFF) + "." + (0xFF & paramInt >> 8) + "." + (0xFF & paramInt >> 16) + "."
+ (0xFF & paramInt >> 24);
}

当在Android设备终端上使用Wifi热点的时候,需要获知Wifi热点的运行状态,热点是否打开,连接到该WIFI热点的设备数量,以及连接设备的具体IP和MAC地址。

使用re文件管理器去"/proc/net/arp",打开,发现连接上热点的设备信息都在这里了,包括mac ip等。

鉴于此,我们可以在代码中打开该文件,并获取WIFI热点的信息。

获取WIFI热点状态的方法getWifiApState()和判断热点是否可用的方法isApEnabled(),在Android源码WifiManager.Java中已经实现,但是它们是Hide方法,在SDK层面是不能访问的,如要访问需要用到java反射的机制。具体代码实现如下:

其中定义WIFI AP的几个状态

public static final int WIFI_AP_STATE_DISABLING = 10;
public static final int WIFI_AP_STATE_DISABLED = 11;
public static final int WIFI_AP_STATE_ENABLING = 12;
public static final int WIFI_AP_STATE_ENABLED = 13;
public static final int WIFI_AP_STATE_FAILED = 14; 

对应于WifiMangaer.java中对这几个状态的定义。

获取WIFI热点的状态:

public int getWifiApState(Context mContext) {
  WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
    try {
      Method method = wifiManager.getClass().getMethod("getWifiApState");
      int i = (Integer) method.invoke(wifiManager);
      Log.i(TAG,"wifi state: " + i);
      return i;
    } catch (Exception e) {
      Log.e(TAG,"Cannot get WiFi AP state" + e);
      return WIFI_AP_STATE_FAILED;
    }
  }  

判断Wifi热点是否可用:

public boolean isApEnabled(Context mContext) {
    int state = getWifiApState(mContext);
    return WIFI_AP_STATE_ENABLING == state || WIFI_AP_STATE_ENABLED == state;
  }  

获取链接到当前热点的设备IP:

private ArrayList<String> getConnectedHotIP() {
  ArrayList<String> connectedIP = new ArrayList<String>();
  try {
    BufferedReader br = new BufferedReader(new FileReader(
        "/proc/net/arp"));
    String line;
    while ((line = br.readLine()) != null) {
      String[] splitted = line.split(" +");
      if (splitted != null && splitted.length >= 4) {
        String ip = splitted[0];
        connectedIP.add(ip);
      }
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
  return connectedIP;
} 

//输出链接到当前设备的IP地址
public void printHotIp() {
  ArrayList<String> connectedIP = getConnectedHotIP();
  StringBuilder resultList = new StringBuilder();
  for (String ip : connectedIP) {
    resultList.append(ip);
    resultList.append("\n");
  }
  System.out.print(resultList);
  Log.d(TAG,"---->>heww resultList="+resultList);
} 

当然在应用中要添加访问WIFI设备的权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

否则将会提示如下错误:

Cannot get WiFi AP state

总结

以上所述是小编给大家介绍的Android 得到连接热点的ip的方法 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

您可能感兴趣的文章:

  • Android获取实时连接热点的设备IP
  • Android获取热点主机ip和连接热点手机ip的代码
(0)

相关推荐

  • Android获取实时连接热点的设备IP

    最近有很多网友向小编咨询这样的问题:通过读取/proc/net/arp文件可以得到连接当前热点的设备的IP,但是一旦设备断开后,该设备的IP还是存在该文件中,遇到这样的麻烦不知道该如何解决了. 就像系统设置里面的 便携式热点管理一样的方便 的方式 可以实时的监控热点的连接设备的变化 下面小编给大家分享一段实例代码,希望可以帮助到大家,具体代码如下所示: private ArrayList getConnectedIP() { ArrayList connectedIP = new ArrayLi

  • Android获取热点主机ip和连接热点手机ip的代码

    其中定义WIFI AP的几个状态 public static final int WIFI_AP_STATE_DISABLING = 10; public static final int WIFI_AP_STATE_DISABLED = 11; public static final int WIFI_AP_STATE_ENABLING = 12; public static final int WIFI_AP_STATE_ENABLED = 13; public static final i

  • Android 得到连接热点的ip的方法

    下面给大家介绍Android 得到连接热点的ip的方法 ,具体代码如下所示: WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); if (!wifiManager.isWifiEnabled()) { System.out.println("================="); wifiManager.setWifiEnabled(true); } WifiInfo

  • Android获取当前已连接的wifi信号强度的方法

    本文实例讲述了Android获取当前已连接的wifi信号强度的方法,是Android程序开发中非常常见的重要技巧.分享给大家供大家参考之用.具体方法如下: 1.得到当前已连接的wifi信息 WifiManager wifi_service = (WifiManager)getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifi_service.getConnectionInfo(); 其中wifiInfo有以下的方法: wifiinfo.ge

  • Android实现编程修改手机静态IP的方法

    本文实例讲述了Android实现编程修改手机静态IP的方法.分享给大家供大家参考.具体如下: 这里演示通过编程方式动态修改手机静态IP的方法,可以用于wifi接入点切换 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ContentResolver cr = this.getContentResolver();

  • Android中实现ping功能的多种方法详解

    使用java来实现ping功能. 并写入文件.为了使用java来实现ping的功能,有人推荐使用java的 Runtime.exec()方法来直接调用系统的Ping命令,也有人完成了纯Java实现Ping的程序,使用的是Java的NIO包(native io, 高效IO包).但是设备检测只是想测试一个远程主机是否可用.所以,可以使用以下三种方式来实现: 1. Jdk1.5的InetAddresss方式 自从Java 1.5,java.net包中就实现了ICMP ping的功能. 使用时应注意,如

  • Docker为网络bridge模式指定容器ip的方法

    前言 众所周知bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace.设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上.下面来看看Docker为网络bridge模式指定容器ip的方法. 实现方法 如果只是简单创建一个bridge模式的网络是无法给容器指定ip的 [root@vultrvpn conf.d]# docker network create --driver bridge wordpress_net ad1ff3d972

  • Android编程获取Wifi名称(SSID)的方法

    本文实例讲述了Android编程获取Wifi名称(SSID)的方法.分享给大家供大家参考,具体如下: 可以使用WifiManager和WifiInfo来获取当前Wifi连接信息 WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); Log.d("wifiInfo", wifiInfo.toSt

  • win2003 服务器超出最大连接+强制重启服务器(方法)

    第一种方法: 到s.jb51.net 下载 3389 windows终端连接器加强版(解决终端人数过多问题) 第二种方法:按开始 --- 运行--- mstsc /console /v: 服务器名或IP或域名 例如 mstsc /console /v:111.158.11.132 那这样就可以用自己的帐号强行登陆服务器了! windows2003默认情况只允许连接2个用户. 解决方法. query user T掉一个管理员logoff * *号为帐号登陆的ID 本机连接到0 mstsc /con

  • CentOS设置静态IP的方法总结

     CentOS设置静态IP的方法总结 1.修改网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0 BOOTPROTO=static #设置网卡获得ip地址的方式,可能的选项为static,dhcp或bootp,分别对应静态指定的 ip地址,通过dhcp协议获得的ip地址,通过bootp协议获得的ip地址 BROADCAST=192.168.0.255 #

随机推荐