Android 串連WIF擷取的資訊剖析

來源:互聯網
上載者:User

Android的參數大致分成兩塊:系統服務參數和平台系統資訊。

系統服務參數:Android的系統服務不僅指服務元件,而且還包括 Android 系統提供的服務功能。Android為這些系統服務參數提供了介面---管理器,不同的組件會有不同的管理器進行管理,主要有Wi-Fi管理,串連管理, 電話管理,電源管理,震動管理,音量管理,IME管理,視窗管理等等,我們通過這些系統服務介面就可以方便地擷取系統資訊。我在此處把一些可能和華為項目 相關的管理器拿出來仔細研究研究。

Wi-Fi管理(重點):

   WifiManager wifi_service = (WifiManager)getSystemService(WIFI_SERVICE);

   //擷取Wi-Fi配置介面的屬性

   List wifiConfig = wifi_service.getConfiguredNetworks();

   wifiConfig中包含四個屬性:

        BSSID:BSS是一種特殊的Ad-hoc LAN(一種支援點對點訪問的無線網路應用模

              式)的應用,一個無線網路至少由一個串連到有線網路的AP和若干無線   

              工作站組成,這種配置稱為一個基本服務裝置。一群電腦設定相同的 

              BSS名稱,即可自成一個group,而此BSS名稱,即所謂BSSID。通常,手

              機WLAN中,bssid其實就是無線路由的MAC地址。

        networkid:網路ID。

        PreSharedKey:無線網路的安全認證模式。

        SSID:SSID(Service Set Identif)用於標識無線區域網路,SSID不同的無線網 

        絡是無法進行互訪的。

    //擷取Wi-Fi的串連資訊

WifiInfo wifiinfo = wifi_service.getConnectionInfo();

     wifiinfo.getBSSID():擷取BSSIS(上面已說明)。

        wifiinfo.getSSID():擷取SSID(上面已說明)。

     wifiinfo.getIpAddress():擷取IP地址。

     wifiinfo.getMacAddress():擷取MAC地址。

     wifiinfo.getNetworkId():擷取網路ID。

        wifiinfo.getLinkSpeed():擷取連線速度,可以讓使用者獲知這一資訊。

     wifiinfo.getRssi():擷取RSSI,RSSI就是接受訊號強度指示。在這可以直    

             接和華為提供的Wi-Fi訊號閾值進行比較來提供給使用者,讓使用者對網路 

             或地理位置做出調整來獲得最好的串連效果。

    

//擷取DHCP資訊 

DhcpInfo dhcpinfo = wifi_service.getDhcpInfo();

   ipAddress:擷取IP地址。

   gateway:擷取網關。

   netmask:擷取子網路遮罩。

   dns1:擷取DNS。

   dns2:擷取備用DNS。

   serverAddress:擷取伺服器位址。


     //擷取掃描資訊

List scanResult = wifi_service.getScanResults();

        BSSID:擷取BSSID(上面已說明)。

        SSID:擷取網路名稱(上面已說明)。

        level:擷取訊號等級。

        frequency:擷取頻率。

        capabilites:對該訪問點安全方面的描述。

    //擷取Wi-Fi的網路狀態

int wifiState = wifi_service.getWifiState();

        WIFI_STATE_DISABLING:常量0,表示停用中。

   WIFI_STATE_DISABLED:常量1,表示不可用。

        WIFI_STATE_ENABLING:常量2,表示啟動中。

        WIFI_STATE_ENABLED:常量3,表示準備就緒。

        WIFI_STATE_UNKNOWN:常量4,表示未知狀態。

    說明:進行網路連接的時候,這些狀態都會被顯示在Notification上,直

         接可以通過此處擷取各個狀態來完成華為的Notification中Wi- Fi

         狀態顯示的需求。



串連管理:

   ConnectivityManager connectionManager = (ConnectivityManager) 

                          getSystemService(CONNECTIVITY_SERVICE);     

    //擷取網路的狀態資訊,有下面三種方式 

NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();

NetworkInfo wifiInfo =     

       connectionManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

NetworkInfo mobileInfo = 

       connectionManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    getDetailedState():擷取詳細狀態。

    getExtraInfo():擷取附加資訊。

    getReason():擷取串連失敗的原因。

    getType():擷取網路類型(一般為移動或Wi-Fi)。

    getTypeName():擷取網路類型名稱(一般取值“WIFI”或“MOBILE”)。

    isAvailable():判斷該網路是否可用。

    isConnected():判斷是否已經串連。

    isConnectedOrConnecting():判斷是否已經串連或正在串連。

    isFailover():判斷是否串連失敗。

    isRoaming():判斷是否漫遊。

   

    //網路狀態接聽程式的使用

    在程式中寫一個Service類繼承BroadcasrReceiver:

    public class NetMonitor extends BroadcastReceiver {

      public void onReceive(Context context, Intent intent) {

         }

     }

    在androidManifest.xml中申明該Rervice:

    <service android:name="NetMonitor" android:lable="NetMonitor">

         <intent-filter>

            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

         </intent-filter>

     </service>

     當網路狀態發生改變的時候,就可以通過該Rervice監聽到該變化,並作出相應      

     的動作。

     

電源管理:

    PowerManager power = (PowerManager) getSystemService(POWER_SERVICE);    

   PARTIAL_WAKE_LOCK:螢幕關閉,鍵盤關閉。

        SCREEN_DIM_WAKE_LOCK:螢幕邊暗,鍵盤關閉。

   SCREEN_BRIGHT_WAKE_LOCK:螢幕點亮,鍵盤關閉。

   FULL_WAKE_LOCK:螢幕點亮,鍵盤點亮。

        ACQUIRE_CAUSES_WAKEUP:當通過喚醒鎖喚醒裝置時,強制螢幕或鍵盤馬上點

            亮(例如:作為重要訊息的通知)。

        ON_AFTER_RELEASE:當喚醒鎖釋放時使用者的Activity組件會被重設,這會造

            成螢幕持續顯示較長的事件。

    //通過喚醒鎖的“acquire”方法按照指定的等級來喚醒裝置,當不需要喚醒鎖時

    可以通過“release”方法來釋放。

    PowerManager.WakeLock locker = powerManager.NewWakeLock(PowerManager.

            ACQUIRE_CAUSES_WAKEUP|powerManager.SCREEN_BRIGHT_WAKE_LOCK,             

                  "PowerServiceDemo");

   locker.acquire();

   locker.release();

震動管理:

    Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);

    通過震動器的“vibrate”方法就可以設定震動持續的時間並啟動震動,通過震動

    器的“cancel”方法取消震動,或者當使用者的程式退出時,所有使用者啟動的震動都將停

    止。



平台系統資訊:Android平台對系統中的進程管理,檔案系統,環境變數,系統時間,平台資訊和電池管理等核心部分的訪問進行深層次的封裝,從而讓開發人員能夠獲得更多的核心系統資訊。



     android.os.Process

     //擷取當前進程的方法

     android.os.Process.getElapsedCpuTime():擷取消耗的時間。

android.os.Process.myPid():擷取該進程的ID。

android.os.Process.myTid():擷取調用進程的ID。

android.os.Process.myUid():擷取該進程的使用者ID。

     android.os.Process.supportsProcesses:判斷該進程是否支援多進程。

      

     // 擷取/設定線程優先順序

     getThreadPriority(int tid):擷取指定ID的線程的優先順序。

     setThreadPriority(int priority):設定當前線程的優先順序。

     setThreadPriority(int tid,int priority):設定指定ID的線程的優先順序。

     

     //管理進程

     killProcess(int pid):殺死指定的進程。

     sendSignal(int pid,int singal):向指定的進程發送訊號。

     

     android.os.Environment

     //擷取系統內容變數

     getDataDirectory():擷取當前系統中資料檔案夾環境變數。

     getDownloadCacheDirectory():擷取當前系統中下載快取檔案環境變數。

     getExternalStorageDirectory():擷取當前系統中外部隱藏檔環境變數。

     getRootDirectory():擷取當前系統中根檔案環境變數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.