在androi中WIFI信息的获取能够通过系统提供的WIFI Service获取

[java] 

WifiManager wifi_service = (WifiManager)getSystemService(WIFI_SERVICE); 

WifiInfo    wifiInfo     = wifi_service.getConnectionInfo();

当中WifiInfo 中比較经常使用的信息有:

[java] 

 /*

   info.getBSSID();      获取BSSID地址。

   info.getSSID();       获取SSID地址。

须要连接网络的ID

   info.getIpAddress();  获取IP地址。4字节Int, XXX.XXX.XXX.XXX 每一个XXX为一个字节

   info.getMacAddress(); 获取MAC地址。

info.getNetworkId()。  获取网络ID。

   info.getLinkSpeed();  获取连接速度。能够让用户获知这一信息。

   info.getRssi();       获取RSSI,RSSI就是接受信号强度指示

*/

同一时候能够通过接收系统的广播,获取当前WIFI的状态

[java]

 /*

   WifiManager.WIFI_STATE_DISABLING   正在停止

   WifiManager.WIFI_STATE_DISABLED    已停止

   WifiManager.WIFI_STATE_ENABLING    正在打开

   WifiManager.WIFI_STATE_ENABLED     已开启

   WifiManager.WIFI_STATE_UNKNOWN     未知

*/

下面给出详细的实例:

1.在布局文件里添加一个WIFI图标,和显示详细信息的文本  (activity_wifi_example.xml)

[html] 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android

    xmlns:tools="http://schemas.android.com/tools

    android:layout_width="match_parent" 

    android:layout_height="match_parent"  

    android:gravity="center" 

    android:orientation="vertical"> 

 

    <ImageButton 

        android:id="@+id/Icon_WifiStatus" 

        android:layout_width="wrap_content" 

        android:layout_height="wrap_content" 

        android:src="@drawable/ic_wifi"/> 

     

    <TextView 

        android:id="@+id/Label_WifiDetail" 

        android:layout_width="wrap_content" 

        android:layout_height="wrap_content" 

        android:maxWidth="320dp"/> 

 

</LinearLayout>

2. 为WIFI图标加入一组可选的图标,在drawable-hdpi文件夹下添加ic_wifi.xml文件,内容例如以下:

[html] view plaincopy

<level-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:maxLevel="0"   android:drawable="@drawable/ic_wifi_s0" /> 

    <item android:maxLevel="50"  android:drawable="@drawable/ic_wifi_s3" /> 

    <item android:maxLevel="70"  android:drawable="@drawable/ic_wifi_s2" /> 

    <item android:maxLevel="100" android:drawable="@drawable/ic_wifi_s1" /> 

</level-list> 

注意须要导入用到的图片

3.在代码中接收WIFI状态广播,开启一个500ms的Timer实时查询WIFI状态 (WifiExample.java)

[java] 

package com.example.wifiexample; 

 

import android.app.Activity; 

import android.content.BroadcastReceiver; 

import android.content.Context; 

import android.content.Intent; 

import android.content.IntentFilter; 

import android.net.wifi.WifiInfo; 

import android.net.wifi.WifiManager; 

import android.os.Bundle; 

import android.os.Handler; 

import android.util.Log; 

import android.view.Menu; 

import android.widget.ImageButton; 

import android.widget.TextView; 

 

public class WifiExample extends Activity { 

 

    private final String TAG = "WifiExample"; 

     

    private IntentFilter      mWifiIntentFilter; 

    private BroadcastReceiver mWifiIntentReceiver; 

     

    private ImageButton       mIconWifi; 

    private TextView          mLabelWifi; 

    private Handler           mHandler; 

     

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.activity_wifi_example); 

         

        mIconWifi  = (ImageButton)findViewById(R.id.Icon_WifiStatus); 

        mLabelWifi = (TextView)findViewById(R.id.Label_WifiDetail);  

                 

        mWifiIntentFilter = new IntentFilter(); 

        mWifiIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 

         

        mWifiIntentReceiver = new mWifiIntentReceiver(); 

        registerReceiver(mWifiIntentReceiver, mWifiIntentFilter); 

         

        mHandler = new Handler(); 

        mHandler.post(new TimerProcess()); 

    } 

 

    @Override 

    public boolean onCreateOptionsMenu(Menu menu) { 

        getMenuInflater().inflate(R.menu.activity_wifi_example, menu); 

        return true; 

    } 

     

    private class TimerProcess implements Runnable{ 

        public void run() { 

            showWIFIDetail(); 

            mHandler.postDelayed(this, 500); 

        } 

    } 

     

    public void showWIFIDetail() 

    { 

        WifiInfo info = ((WifiManager)getSystemService(WIFI_SERVICE)).getConnectionInfo(); 

        mIconWifi.setImageLevel(Math.abs(info.getRssi())); 

         

        /*

        info.getBSSID();      获取BSSID地址。

        info.getSSID();       获取SSID地址。  须要连接网络的ID

        info.getIpAddress();  获取IP地址。4字节Int, XXX.XXX.XXX.XXX 每一个XXX为一个字节

        info.getMacAddress(); 获取MAC地址。

        info.getNetworkId();  获取网络ID。

        info.getLinkSpeed()。  获取连接速度。能够让用户获知这一信息。

        info.getRssi();       获取RSSI,RSSI就是接受信号强度指示

         */ 

         

        int Ip = info.getIpAddress(); 

        String strIp = "" + (Ip & 0xFF) + "." + ((Ip >> 8) & 0xFF) + "." + ((Ip >> 16) & 0xFF) + "." + ((Ip >> 24) & 0xFF); 

         

        mLabelWifi.setText("BSSID : " + info.getBSSID() + "\nSSID : " + info.getSSID() +  

                "\nIpAddress : " + strIp + "\nMacAddress : " + info.getMacAddress() + 

                "\nNetworkId : " + info.getNetworkId() + "\nLinkSpeed : " + info.getLinkSpeed() + "Mbps" +  

                "\nRssi : " + info.getRssi()); 

        info.getIpAddress(); 

    } 

     

    private class mWifiIntentReceiver extends BroadcastReceiver{ 

 

        public void onReceive(Context context, Intent intent) { 

 

            WifiInfo info = ((WifiManager)getSystemService(WIFI_SERVICE)).getConnectionInfo(); 

            mIconWifi.setImageLevel(Math.abs(info.getRssi())); 

         

            /*

            WifiManager.WIFI_STATE_DISABLING   正在停止

            WifiManager.WIFI_STATE_DISABLED    已停止

            WifiManager.WIFI_STATE_ENABLING    正在打开

            WifiManager.WIFI_STATE_ENABLED     已开启

            WifiManager.WIFI_STATE_UNKNOWN     未知

             */ 

             

            switch (intent.getIntExtra("wifi_state", 0)) { 

            case WifiManager.WIFI_STATE_DISABLING: 

                Log.d(TAG, "WIFI STATUS : WIFI_STATE_DISABLING"); 

                break; 

            case WifiManager.WIFI_STATE_DISABLED: 

                Log.d(TAG, "WIFI STATUS : WIFI_STATE_DISABLED"); 

                break; 

            case WifiManager.WIFI_STATE_ENABLING: 

                Log.d(TAG, "WIFI STATUS : WIFI_STATE_ENABLING"); 

                break; 

            case WifiManager.WIFI_STATE_ENABLED: 

                Log.d(TAG, "WIFI STATUS : WIFI_STATE_ENABLED"); 

                break; 

            case WifiManager.WIFI_STATE_UNKNOWN: 

                Log.d(TAG, "WIFI STATUS : WIFI_STATE_UNKNOWN"); 

                break; 

        } 

    } 

    } 

}

4.最后在AndroidManifest.xml添加获取WIFI权限的支持

[html

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

android WIFI信息获取的更多相关文章

  1. Android屏幕信息获取

    Android中有时需要获取屏幕的size信息以便对控件位置进行动态控制,最近做了一些研究,现在将获取屏幕大小信息的方法总结如下,可能存在一些地方理解的不全面. 1.getMetrics Displa ...

  2. Android电池信息获取

    Android 可以通过BroadcastReceiver来获取电池信息改变的广播(ACTION_BATTERY_CHANGED),从而获取到相关的电池信息. 电池信息,及其对应的相关常数(参考网址: ...

  3. android sdcard信息获取

    手机存储都有两种,一种是 手机自带的存储,称为internal storage,另外一种用户额外插入的存储,称为removable storage (也就是外置sdcard的部分). removabl ...

  4. android 手机信息获取

    1. adb已安装 2. adb shell getprop 此时已列出所有相关信息

  5. 获取wifi信息

    最近有个项目需要获取手机附近wifi列表,查了许多资料发现,现在只能查到wifi的SSID,并且用到的是私有api,无法通过app store审核,这里记录一下,方便学习,新手勿喷,欢迎大神指教(wi ...

  6. Android设备网络、屏幕尺寸、SD卡、本地IP、存储空间等信息获取工具类

    Android设备网络.屏幕尺寸.SD卡.本地IP.存储空间.服务.进程.应用包名等信息获取的整合工具类. package com.qiyu.ddb.util; import android.anno ...

  7. 【风马一族_Android】Android 从命令行界面获取手机信息

    Android 从命令行界面获取手机信息 1: cmd 打开命令行界面 2:adb devices   获取与电脑相连的设备,例如:模拟器.真机(手机) (右击“标记”,选择设备名称,点击“Ctrl+ ...

  8. iOS获取当前连接的wifi信息

    导入框架CaptiveNetwork #import <SystemConfiguration/CaptiveNetwork.h> 获取当前连接的wifi信息 // 只能获取当前的SSID ...

  9. 解决Android 6.0获取wifi Mac地址为02:00:00:00:00:00问题【转】

    本文转载自:http://www.jb51.net/article/128398.htm 这篇文章主要介绍了Android 6.0获取wifi Mac地址为02:00:00:00:00:00的解决方法 ...

随机推荐

  1. luogu 2709小b的询问--莫队

    https://www.luogu.org/problemnew/show/P2709 无修改的莫队几乎没有什么太高深的套路,比较模板吧,大多都是在那两个函数上动手脚. 这题询问每一种数字数量的平方和 ...

  2. 天梯赛L1 题解

    L1-001 Hello World (5 分) 这道超级简单的题目没有任何输入. 你只需要在一行中输出著名短句“Hello World!”就可以了. AC代码:(直接输出记性) #include & ...

  3. Python 2 和 Python 3 主要区别有哪些(1)

    Guido(Python之父,仁慈的独裁者)在设计 Python3 的过程中,受一篇文章 “Python warts” 的影响,决定不向后兼容,否则无法修复大多数缺陷.---摘录自<流畅的Pyt ...

  4. 剑指Offer(书):用两个栈实现队列

    题目:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析:入栈时只入栈1,出栈为栈2:若栈2不为空,直接出栈:否则,将栈1中的值依次入栈2,之后栈2出栈 Sta ...

  5. [第一波模拟\day2\T1] {病毒分裂}(split.cpp)

    [题目描述] A 学校的实验室新研制出了一种十分厉害的病毒.由于这种病毒太难以人工制造了,所以专家们在一开始只做出了一个这样的病毒.这个病毒被植入了特殊的微型芯片,使其可以具有一些可编程的特殊性能.最 ...

  6. Java学习之分支结构---判断语句:if语句和switch语句

    一个if语句包含一个布尔表达式和一条或多条语句,if 语句的用语法如下:if 语句 if(布尔表达式) { //如果布尔表达式为true将执行的语句 },如果布尔表达式的值为 true,则执行 if ...

  7. XTU 二分图和网络流 练习题 C. 方格取数(1)

    C. 方格取数(1) Time Limit: 5000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d      Java class ...

  8. Cake(凸包+区间DP)

    You want to hold a party. Here's a polygon-shaped cake on the table. You'd like to cut the cake into ...

  9. 禁止ScrollView在子控件的布局改变时自动滚动的的方法

    重写scrollview中的如下方法,并将其返回值设为0即可. @Override  protected int computeScrollDeltaToGetChildRectOnScreen(Re ...

  10. CodeForces - 586D Phillip and Trains

    这道题是一道搜索题 但是 如果没有读懂或者 或者拐过弯 就很麻烦 最多26个火车 那么每一个周期 (人走一次 车走一次) 就要更改地图 的状态 而且操作复杂 容易超时 出错 利用相对运动 计周期为 人 ...