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 연결 구현은 아래 포스팅에서 볼 수 있다.
반응형
'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 |