zoukankan      html  css  js  c++  java
  • android WIFI信息获取

    在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() + " SSID : " + info.getSSID() +  
                    " IpAddress : " + strIp + " MacAddress : " + info.getMacAddress() + 
                    " NetworkId : " + info.getNetworkId() + " LinkSpeed : " + info.getLinkSpeed() + "Mbps" +  
                    " Rssi : " + 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"/> 

  • 相关阅读:
    Sql Server 2008卸载后再次安装一直报错
    listbox 报错 Cannot have multiple items selected when the SelectionMode is Single.
    Sql Server 2008修改Sa密码
    学习正则表达式
    Sql Server 查询第30条数据到第40条记录数
    Sql Server 复制表
    Sql 常见面试题
    Sql Server 简单查询 异步服务器更新语句
    jQuery stop()用法以及案例展示
    CSS3打造不断旋转的CD封面
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6867120.html
Copyright © 2011-2022 走看看