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"/> 

  • 相关阅读:
    4-12日 面向对象的组合和继承
    4-8日 递归和二分查找
    4-11 对象的交互 命名空间作用域
    [LeetCode]-algorithms-Reverse Integer
    [LeetCode]-algorithms-Longest Palindromic Substring
    [LeetCode]-algorithms-Median of Two Sorted Arrays
    [LeetCode]-algorithms-Longest Substring Without Repeating Characters
    [LeetCode]-algorithms-Add Two Numbers
    Java中创建String的两种方式
    Java中String为什么是不可变的
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6867120.html
Copyright © 2011-2022 走看看