android WIFI信息獲取

jopen 12年前發布 | 2K 次閱讀 html5未來 Rspamd Cocos Code IDE

在androi中WIFI信息的獲取可以通過系統提供的WIFI Service獲取

WifiManager wifi_service = (WifiManager)getSystemService(WIFI_SERVICE);
WifiInfo    wifiInfo     = wifi_service.getConnectionInfo();

其中WifiInfo 中比較常用的信息有:

 /*
   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的狀態

 /*
   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)

<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文件,內容如下:

<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)

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權限的支持

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


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!