WIFI가 연결되면 SSID 받기
내 안드로이드 장치가 WIFI에 연결되어있을 때 WIFI 네트워크의 SSID를 얻으려고합니다.
을 (를) 듣고있는 BroadcastReceiver를 등록했습니다 android.net.wifi.supplicant.CONNECTION_CHANGE
. WIFI 연결이 끊어 지거나 다시 연결되면 알림을받습니다. 불행히도 네트워크의 SSID를 가져올 수 없습니다.
SSID를 찾기 위해 다음 코드를 사용하고 있습니다.
WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String ssid = wifiInfo.getSSID();
SSID 대신 문자열을 <unknown ssid>
다시 얻습니다 .
이것들은 매니페스트의 권한입니다 (확인하기 위해 ACCESS_NETWORK_STATE를 추가했지만 실제로는 필요하지 않습니다)
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
왜 이런 일이 발생합니까? 실제 SSID는 어떻게 얻을 수 있습니까? 연결이 설정되기 전에 방송이 일찍 시작됩니까? 들어야 할 또 다른 방송이 있습니까? 3G 연결이 아닌 WIFI 연결에만 관심이 있습니다.
업데이트 : 방금 확인하고 wifiInfo.getBSSID()
null을 반환합니다.
브로드 캐스트 수신기에서 WifiManager.NETWORK_STATE_CHANGED_ACTION을 수신합니다.
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals (action)) {
NetworkInfo netInfo = intent.getParcelableExtra (WifiManager.EXTRA_NETWORK_INFO);
if (ConnectivityManager.TYPE_WIFI == netInfo.getType ()) {
netInfo.isConnected ()를 확인합니다. 그런 다음 사용할 수 있습니다
WifiManager wifiManager = (WifiManager) getSystemService (Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo ();
String ssid = info.getSSID();
최신 정보
안드로이드 8.0부터는 GPS가 켜져 있지 않으면 연결된 네트워크의 SSID를 얻지 못합니다.
Android 8.1 (API 27) 부터 또는 에서 결과를 얻으려면 앱에 ACCESS_COARSE_LOCATION
(또는 ACCESS_FINE_LOCATION
) 권한을 부여해야합니다 .WifiInfo.getSSID()
WifiInfo.getBSSID()
이 권한은 결과를 얻기 위해 필요 WifiManager.getConnectionInfo()
하고 WifiManager.getScanResults()
이것은 8.1의 새로운 또는 이전에 필요한 경우는 명확하지 않지만.
출처 : "BSSID / SSID를 사용하여 위치를 추론 할 수 있으므로 WifiManager.getConnectionInfo ()를 사용하여 요청한 이러한 WifiInfo 필드에 액세스하려면 WifiManager.getScanResults ()와 동일한 위치 권한이 필요합니다."
Broadcast Receiver를 만들고 싶지 않다면 간단하게 시도하십시오.
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo;
wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo.getSupplicantState() == SupplicantState.COMPLETED) {
ssid = wifiInfo.getSSID();
}
사용자가 연결을 끊거나 새 SSID 또는 Wi-Fi 상태 변경에 연결할 때마다 WifiInfo를 초기화해야합니다. wifiInfo = wifiManager.getConnectionInfo();
현재 연결된 Wifi AP의 SSID를 얻을 수있는 흥미로운 솔루션을 찾았습니다. 반복을 사용 WifiManager.getConfiguredNetworks()
하고 특정 구성을 찾기 만하면됩니다.WifiInfo.getNetworkId()
내 예
작업이있는 브로드 캐스트 수신기 WifiManager.NETWORK_STATE_CHANGED_ACTION
에서 의도에서 현재 연결 상태를 얻고 있습니다.
NetworkInfo nwInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
nwInfo.getState()
경우 NetworkInfo.getState
IS가 동일 NetworkInfo.State.CONNECTED
그럼 내가 현재 WifiInfo 객체를 얻을 수 있습니다
WifiManager wifiManager = (WifiManager) getSystemService (Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo ();
그리고 나서
public String findSSIDForWifiInfo(WifiManager manager, WifiInfo wifiInfo) {
List<WifiConfiguration> listOfConfigurations = manager.getConfiguredNetworks();
for (int index = 0; index < listOfConfigurations.size(); index++) {
WifiConfiguration configuration = listOfConfigurations.get(index);
if (configuration.networkId == wifiInfo.getNetworkId()) {
return configuration.SSID;
}
}
return null;
}
그리고이 방법 이 위치 나 위치 권한을 요구하지 않는 매우 중요한 것은
Android 8.1에서 SSID를 얻으려면 위치를 켜야합니다. 연결 상태는 얻을 수 없지만 SSID는 얻을 수 없습니다.
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = null;
if (wifiManager != null)
wifiInfo = wifiManager.getConnectionInfo();
String ssid = null;
if (wifiInfo != null)
ssid = wifiInfo.getSSID(); /*you will get SSID <unknown ssid> if location turned off*/
이것은 @EricWoodruff가 제공 한 답변에 대한 후속 조치입니다.
You could use netInfo
's getExtraInfo()
to get wifi SSID.
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals (action)) {
NetworkInfo netInfo = intent.getParcelableExtra (WifiManager.EXTRA_NETWORK_INFO);
if (ConnectivityManager.TYPE_WIFI == netInfo.getType ()) {
String ssid = info.getExtraInfo()
Log.d(TAG, "WiFi SSID: " + ssid)
}
}
If you are not using BroadcastReceiver check this answer to get SSID using Context
This is tested on Android Oreo 8.1.0
Android 9 SSID showing NULL values use this code..
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (networkInfo.isConnected()) {
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
wifiInfo.getSSID();
String name = networkInfo.getExtraInfo();
String ssid = wifiInfo.getSSID();
return ssid.replaceAll("^\"|\"$", "");
}
ReferenceURL : https://stackoverflow.com/questions/21391395/get-ssid-when-wifi-is-connected
'code' 카테고리의 다른 글
GDB를 프로세스에 연결하려고 할 때 "ptrace 작업이 허용되지 않음"을 해결하는 방법은 무엇입니까? (0) | 2021.01.09 |
---|---|
ObserveOn 및 SubscribeOn-작업이 수행되는 위치 (0) | 2021.01.09 |
Ctrl R이 SQL Server 2012에서 작동하지 않습니다. (0) | 2021.01.09 |
오류 StrictMode $ AndroidBlockGuardPolicy.onNetwork (0) | 2021.01.09 |
Laravel 마이그레이션 테이블이 이미 존재하지만 이전 항목이 아닌 새 항목을 추가하고 싶습니다. (0) | 2021.01.09 |