Android通過廣播監測Wi-Fi和行動式熱點開關狀態
阿新 • • 發佈:2019-02-02
前言
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>
(以上程式碼均來自網路,由我整理髮布)