我有以下BroadcastRecevier:使用BroadcastReceiver獲取Android中斷開的WiFi網絡的SSID?
public class WiFiConnectionEventsReceiver extends BroadcastReceiver {
private static final String TAG = WiFiConnectionEventsReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, @NonNull Intent intent) {
Log.v(TAG, "action: " + intent.getAction());
Log.v(TAG, "component: " + intent.getComponent());
Bundle extras = intent.getExtras();
if (extras != null) {
for (String key : extras.keySet()) {
Log.v(TAG, "key [" + key + "]: " +
extras.get(key));
}
} else {
Log.v(TAG, "no extras");
}
ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = conMan.getActiveNetworkInfo();
if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI) {
Log.d("NetworkInfo", "Have Wifi Connection");
Log.d("NetworkInfo", netInfo.getExtraInfo());
Log.d("NetworkInfo", netInfo.getTypeName());
}
else {
Log.d("NetworkInfo", "Don't have Wifi Connection");
Log.d("NetworkInfo", netInfo.getExtraInfo());
Log.d("NetworkInfo", netInfo.getTypeName());
}
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
Log.d("WifiInfo", wifiManager.getConnectionInfo().toString());
}
}
它接收的網絡連接和斷開事件。
當它連接到WiFi網絡時,我能夠輕鬆獲得網絡的SSID。
但我希望能夠在網絡斷開連接時獲得WiFi網絡的SSID(無需存儲先前連接的網絡,然後將它們與之匹配等)。這可能嗎?
登錄時的WiFi連接:
V/WiFiConnectionEventsReceiver: action: android.net.conn.CONNECTIVITY_CHANGE
V/WiFiConnectionEventsReceiver: component: ComponentInfo{com.example.test/com.example.test.WiFiConnectionEventsReceiver}
V/WiFiConnectionEventsReceiver: key [networkInfo]: [type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "SKY123」, roaming: false, failover: false, isAvailable: true]
V/WiFiConnectionEventsReceiver: key [networkType]: 1
V/WiFiConnectionEventsReceiver: key [inetCondition]: 100
V/WiFiConnectionEventsReceiver: key [extraInfo]: "SKY123」
D/NetworkInfo: Have Wifi Connection
D/NetworkInfo: "SKY123」
D/NetworkInfo: WIFI
D/WifiInfo: SSID: SKY123, BSSID: 10:40:03:ad:6x:c9, MAC: 02:00:00:00:00:00, Supplicant state: COMPLETED, RSSI: -79, Link speed: 43Mbps, Frequency: 2412MHz, Net ID: 1, Metered hint: false, score: 60
日誌時,無線網絡斷開連接(注未知SSID):
V/WiFiConnectionEventsReceiver: action: android.net.conn.CONNECTIVITY_CHANGE
V/WiFiConnectionEventsReceiver: component: ComponentInfo{com.example.test/com.example.test.WiFiConnectionEventsReceiver}
V/WiFiConnectionEventsReceiver: key [networkInfo]: [type: WIFI[], state: DISCONNECTED/DISCONNECTED, reason: (unspecified), extra: <unknown ssid>, roaming: false, failover: false, isAvailable: true]
V/WiFiConnectionEventsReceiver: key [networkType]: 1
V/WiFiConnectionEventsReceiver: key [inetCondition]: 0
V/WiFiConnectionEventsReceiver: key [extraInfo]: <unknown ssid>
V/WiFiConnectionEventsReceiver: key [noConnectivity]: true
D/NetworkInfo: Don't have Wifi Connection
D/NetworkInfo: id
D/NetworkInfo: MOBILE
D/WifiInfo: SSID: <unknown ssid>, BSSID: <none>, MAC: 02:00:00:00:00:00, Supplicant state: COMPLETED, RSSI: -127, Link speed: -1Mbps, Frequency: -1MHz, Net ID: -1, Metered hint: false, score: 0
我想這個信息的原因是我希望能夠跟蹤用戶在每個網絡上的WiFi使用情況 - 連接和斷開時間。
沒有斷開連接的網絡的SSID,我能想到做到這一點的唯一方法是這樣的:
if (WiFi network ABC disconnected)
if (if previous stored connection for WiFi network ABC has no disconnection time)
set WiFI network ABC disconnection time to now
然而,上述做法感到片狀,例如,如果什麼某種原因,無線網絡斷線事件被遺漏等
我會建議使用這樣的事情。然而,這不能保證它是一個斷開,先前已連接的是現在顯示的可用wifis只有一個。 –
你是對的,但你收到這個清單後,你可以斷開無線網絡比較每個項目的BSSID。它可能不是在任何時候都找到它,但大部分會的。 – Dus