1. 程式人生 > >Android通過廣播監測Wi-Fi和行動式熱點開關狀態

Android通過廣播監測Wi-Fi和行動式熱點開關狀態

前言

Android端通過廣播的形式動態監測Wi-Fi狀態以及行動式熱點開關狀態,其中獲取Wi-Fi狀態很簡單,網上很多示例,但是通過廣播獲取熱點開關狀態相關的資料少之又少,不過好在一個國外網站找到了解決辦法,在此分享給大家。

正文

直接看程式碼

package com.tl.test;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.NetworkInfo;
import android.net
.wifi.WifiInfo; import android.net.wifi.WifiManager; /** * 該類是用於實時監測WiFi狀態以及熱點開關變化 */ public class WifiReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals(WifiManager.RSSI_CHANGED_ACTION)){ //signal strength changed } else if(action.equals
(WifiManager.NETWORK_STATE_CHANGED_ACTION)){//wifi連線上與否 System.out.println("網路狀態改變"); NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); if(info.getState().equals(NetworkInfo.State.DISCONNECTED)){ System.out.println("wifi網路連線斷開"
); } else if(info.getState().equals(NetworkInfo.State.CONNECTED)){ WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); //獲取當前wifi名稱 System.out.println("連線到網路 " + wifiInfo.getSSID()); } } else if("android.net.wifi.WIFI_AP_STATE_CHANGED".equals(action)){ //行動式熱點的狀態為:10---正在關閉;11---已關閉;12---正在開啟;13---已開啟 int state = intent.getIntExtra("wifi_state", 0); System.out.println("熱點開關狀態:state= "+String.valueOf(state)); if(state == 13){ System.out.println("熱點已開啟"); } else if(state == 11){ System.out.println("熱點已關閉"); } else if(state == 10){ System.out.println("熱點正在關閉"); } else if(state == 12){ System.out.println("熱點正在開啟"); } } else if(action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)){//wifi開啟與否 int wifistate = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED); if(wifistate == WifiManager.WIFI_STATE_DISABLED){ System.out.println("系統關閉wifi"); } else if(wifistate == WifiManager.WIFI_STATE_ENABLED){ System.out.println("系統開啟wifi"); } } } }

最後,註冊廣播,這裡我選用靜態註冊的方式,在AndroidManifest.xml中新增

<!--靜態註冊廣播 -->
        <receiver android:name=".WifiReceiver" android:enabled="true" android:exported="true">
            <intent-filter>
                <action android:name="android.NET.wifi.RSSI_CHANGED"/>
                <action android:name="android.net.wifi.STATE_CHANGE"/>
                <action android:name="android.Net.wifi.WIFI_STATE_CHANGED"/>
            </intent-filter>
        </receiver>

(以上程式碼均來自網路,由我整理髮布)