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

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

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

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

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

其中定义WIFI AP的几个状态

[java] view plain copy

  1. public static final int WIFI_AP_STATE_DISABLING = 10;
  2. public static final int WIFI_AP_STATE_DISABLED = 11;
  3. public static final int WIFI_AP_STATE_ENABLING = 12;
  4. public static final int WIFI_AP_STATE_ENABLED = 13;
  5. public static final int WIFI_AP_STATE_FAILED = 14;

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

获取WIFI热点的状态:

[java] view plain copy

  1. public int getWifiApState(Context mContext) {
  2. WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
  3. try {
  4. Method method = wifiManager.getClass().getMethod("getWifiApState");
  5. int i = (Integer) method.invoke(wifiManager);
  6. Log.i(TAG,"wifi state:  " + i);
  7. return i;
  8. } catch (Exception e) {
  9. Log.e(TAG,"Cannot get WiFi AP state" + e);
  10. return WIFI_AP_STATE_FAILED;
  11. }
  12. }

判断Wifi热点是否可用:

[java] view plain copy

  1. public boolean isApEnabled(Context mContext) {
  2. int state = getWifiApState(mContext);
  3. return WIFI_AP_STATE_ENABLING == state || WIFI_AP_STATE_ENABLED == state;
  4. }

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

[java] view plain copy

  1. private ArrayList<String> getConnectedHotIP() {
  2. ArrayList<String> connectedIP = new ArrayList<String>();
  3. try {
  4. BufferedReader br = new BufferedReader(new FileReader(
  5. "/proc/net/arp"));
  6. String line;
  7. while ((line = br.readLine()) != null) {
  8. String[] splitted = line.split(" +");
  9. if (splitted != null && splitted.length >= 4) {
  10. String ip = splitted[0];
  11. connectedIP.add(ip);
  12. }
  13. }
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. return connectedIP;
  18. }

[java] view plain copy

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

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

[html] view plain copy

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

否则将会提示如下错误:

Cannot get WiFi AP state

时间: 2024-10-13 11:29:56

android 得到连接热点的ip的方法的相关文章

android获取wifi外网ip的方法

<span style="font-size:18px;"> // 获取外网IP public static String GetNetIp() { URL infoUrl = null; InputStream inStream = null; try { // http://iframe.ip138.com/ic.asp // infoUrl = new URL("http://city.ip138.com/city0.asp"); infoUrl

Android -- Wifi连接流程分析

Android -- Wifi连接流程分析 当我们在Android手机上连接一个AP时,间接调用WifiManager的connect()方法: /** * Connect to a network with the given configuration. The network also * gets added to the supplicant configuration. * * For a new network, this function is used instead of a

Android SDK Manager 更新失败的解决方法

Android SDK Manager 更新失败的解决方法 原文地址 最近使用Android SDK Manager 更新Android SDK tools 发现经常更新失败,获取不到更新信息: Java代码   Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml Fetched Add-ons List successfully Fetching URL: https://dl-ssl.google.c

android 通过wifi 热点实现手机摄像头数据共享(转)

原文地址:http://blog.csdn.net/sinat_35845281/article/details/52674946 最近想搞一个新奇的玩意儿~~~ 最近一直在在学习通过两个Android手机通过wifi共享摄像头的数据.弄了好久有了点头目.具体有下面几个步骤: 1.对手机相机的开发,自定义surfaceView来定义自己的相机类.主要是显示手机摄像头的画面. 2.对自定义相机的预览画面的数据的获取.然后对数据进行解析. 3.在两台Android手机通过wifi建立传输数据的连接.

Android代码连接Wifi时被系统切换到其他Wifi的问题

首先说下Android代码连接Wifi的几个步骤:(以下涉及到具体API函数自查哈,写的时候凭借印象大致写了下) 转载请注明出处: 胖虎:http://blog.csdn.net/ljphhj 1.首先要开启Wifi连接开关,mWifiManager.setWifiEnabled(true) 2.通过获取List<ScanResult>来获取到Wifi连接列表.(mWifiManager.getScanResults) 3.获取List<WifiConfiguration>列表.(

[转载]关于安装Android Studio的一些问题的解决方法

最近在研究Android编程,在Android Studio安装和使用时遇到了麻烦,从园子里找到了<关于安装Android Studio的一些问题的解决方法>的,很多问题找到了解决办法. 问题1:每次Fetching android sdk component information 这是在检查你的 Android SDK .有人会在这里卡上很长时间,很大的原因就是:网络连接有问题.可以通过配置 hosts(fan*qiang) 的方式来解决. 如果想跳过这一步 对策: 在Android St

免安装Oracle客户端使用PL/SQL连接Oracle的2种方法

作者:netshuai  来源:博客园  发布时间:2009-10-23 09:19  阅读:171 次  原文链接   [收藏] 方法一: 大家都知道,用PL/SQL连接Oracle,是需要安装Oracle客户端软件的.有没要想过不安装Oracle客户端直接连接Oracle呢? 其实我一直想这样做,因为这个客户端实在太让人讨厌了!!!不但会安装一个JDK,而且还会把自己放在环境变量的最前面,会造成不小的麻烦. 其实我之前问过很多人的,但是他们都说一定需要安装Oracle客户端的.......直

Android 网络连接判断与处理

Android网络连接判断与处理 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 1)判断是否有网络连接 复制代码 1 public boolean isNetworkConnected(Context context) { 2     if (context != null) { 3    

android - 模拟器连接本地tomcat

在使用android真机试图连接本地的tomcat的时候,发现一直没有反应.网上搜了很多资料,加上自己不断测试,后来发现模拟器访问tomcat的时候,ip的概念跟在pc上访问tomcat用的ip,根本就不同,更不用说真机了.怎么说呢?如果使用localhost(或127.0.0.1)就表示连接android 模拟器本身,所以,通过localhost(或127.0.0.1)连接,是行不通的.这时(使用android模拟器连接tomcat)可以使用android模拟器默认的ip(10.0.0.2),