Android

WifiNetworkSuggestion 구현 예제

Darane 2020. 4. 20. 08:00

WifiNetworkSuggestion은 이름과 같이 Wi-Fi 네트워크를 사용자에게 제안해주는 API이다. Android10(API레벨 29) 이상에서 사용 가능하다. App에서 구현한 Wi-Fi 네트워크 정보들을 추가하여 App을 사용하는 사용자에게 추천해 줄 수 있다. 

 

등록을 위한 WifiManager.addNetworkSuggestions() API는 사용자에게 제안할 Wi-Fi 네트워크를 등록하는 용도이며 API 호출 시 바로 Wi-Fi 네트워크를 제안하는 Notification을 발생시키진 않는다. 

 

추가된 Wi-Fi 네트워크는 Nearby(주변기기를 찾고 통신하기 위한 Platform)를 통해 최초 발견되면 Notification으로 사용자에게 알려 준다.

1. 예제

: 2개의 Wi-Fi Access Point를 등록

WifiNetworkSuggestion suggestionOpen = new WifiNetworkSuggestion.Builder()
            .setSsid("freewifi") //SSID 이름
            .build();

WifiNetworkSuggestion suggestionWpa2 = new WifiNetworkSuggestion.Builder()
            .setSsid("iptime") //SSID 이름
            .setWpa2Passphrase("12345678") //비밀번호
            .build();

List<WifiNetworkSuggestion> networkSuggestions = new ArrayList<>();
networkSuggestions.add(suggestionOpen);
networkSuggestions.add(suggestionWpa2);

WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiManager.addNetworkSuggestions(networkSuggestions);

int status = wifiManager.addNetworkSuggestions(networkSuggestions)

 

Broadcast

: 제안한 Wi-Fi가 선택되어 연결되었을 경우 수신받음

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION.equals(intent.getAction())) {
            //제안된 Wi-Fi netwrok 연결 후 처리
        }
    }
};
        
IntentFilter intentFilter = new IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)
getApplicationContext().registerReceiver(broadcastReceiver, intentFilter);

 

WifiManager.removeNetworkSuggestions()

: 제안한 Wi-Fi 삭제

List<WifiNetworkSuggestion> networkSuggestions = new ArrayList<>();
networkSuggestions.add(suggestionOpen);
networkSuggestions.add(suggestionWpa2);

int status = wifiManager.removeNetworkSuggestions(networkSuggestions);

 

필요한 permission

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

 

2. WifiManager.addNetworkSuggestions() 반환 값

Status  
STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_DUPLICATE 이미 Wi-Fi Network가 등록된 경우
STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_EXCEEDS_MAX_PER_APP App 당 등록가능 수가 넘은 경우(256 또는 1024개 등록 가능)
STATUS_NETWORK_SUGGESTIONS_ERROR_APP_DISALLOWED 사용자가 change_wifi_state 권한을 주지 않은 경우
STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_ERROR_INTERNAL Platform 내부에서 오류가 난 경우
STATUS_NETWORK_SUGGESTIONS_ERROR_REMOVE_INVALID 삭제할 Wi-Fi Network가 없는 경우
STATUS_NETWORK_SUGGESTIONS_SUCCESS 성공

 

WifiNetworkSpecifier를 통한 Wi-Fi 연결 구현은 아래 포스팅에서 볼 수 있다.

 

WifiNetworkSpecifier 구현 예제

WifiNetworkSpecifier는 Android10(API 레벨 29) 이상 기기에서 새롭게 사용할 수 있는 API이다. 폰에서 구글 크롬캐스트나 구글 홈과 같은 기기의 Wi-Fi Network로 연결하여 통신하는데 사용할 수 있다. 연결할.

3edc.tistory.com

 

2020/04/19 - [Android] - WifiNetworkSpecifier 구현 예제

반응형

'Android' 카테고리의 다른 글

Android adb command list  (0) 2021.09.07
Android Annotation Summary  (0) 2021.09.07
List up Android version, SDK version, API level  (0) 2021.09.03
WifiNetworkSuggestion Example  (0) 2021.09.02
Android 버전, SDK 버전, API 수준 정리  (0) 2020.07.27
Android adb 명령어 정리  (0) 2020.05.19
Android Annotation 정리  (0) 2020.04.23
WifiNetworkSpecifier 구현 예제  (6) 2020.04.19