Android 10 (API 레벨 29) 이상를 실행하는 기기에서는 앱이 기기에 네트워크 사용자 인증 정보를 추가하여 Wi-Fi 액세스 포인트에 자동 연결할 수 있습니다. WifiNetworkSuggestion
을 사용하면 연결한 네트워크에 대한 제안을 제공할 수 있습니다. 최종적으로는 플랫폼이 여러 앱의 입력에 기초하여 허용할 액세스 포인트를 선택합니다.
다음의 코드 샘플은 개방된 네트워크 1개, WPA2 네트워크 1개, WPA3 네트워크 1개에 대해 사용자 인증 정보를 제공하는 방법을 보여줍니다.
Kotlin
val suggestion1 = WifiNetworkSuggestion.Builder() .setSsid("test111111") .setIsAppInteractionRequired() // Optional (Needs location permission) .build() val suggestion2 = WifiNetworkSuggestion.Builder() .setSsid("test222222") .setWpa2Passphrase("test123456") .setIsAppInteractionRequired() // Optional (Needs location permission) .build() val suggestion3 = WifiNetworkSuggestion.Builder() .setSsid("test333333") .setWpa3Passphrase("test6789") .setIsAppInteractionRequired() // Optional (Needs location permission) .build() val suggestionsList = listOf(suggestion1, suggestion2, suggestion3) val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager val status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // do error handling here } // Optional (Wait for post connection broadcast to one of your suggestions) val intentFilter = IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION); val broadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (!intent.action.equals(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) { return; } // do post connect processing here } }; context.registerReceiver(broadcastReceiver, intentFilter);
Java
final WifiNetworkSuggestion suggestion1 = new WifiNetworkSuggestion.Builder() .setSsid("test111111") .setIsAppInteractionRequired() // Optional (Needs location permission) .build() final WifiNetworkSuggestion suggestion2 = new WifiNetworkSuggestion.Builder() .setSsid("test222222") .setWpa2Passphrase("test123456") .setIsAppInteractionRequired() // Optional (Needs location permission) .build() final WifiNetworkSuggestion suggestion3 = new WifiNetworkSuggestion.Builder() .setSsid("test333333") .setWpa3Passphrase("test6789") .setIsAppInteractionRequired() // Optional (Needs location permission) .build() final List<WifiNetworkSuggestion> suggestionsList = new ArrayList<WifiNetworkSuggestion> {{ add(suggestion1); add(suggestion2); add(suggestion3); }}; final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); final int status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // do error handling here… } // Optional (Wait for post connection broadcast to one of your suggestions) final IntentFilter intentFilter = new IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION); final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (!intent.getAction().equals( WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) { return; } // do post connect processing here... } }; context.registerReceiver(broadcastReceiver, intentFilter);
플랫폼이 네트워크에 연결하기 전에 반드시 앱에서의 제안은 사용자의 승인을 받아야 합니다. 이러한 승인은 플랫폼이 스캔 결과에서 앱의 제안 중 하나와 일치하는 네트워크를 처음으로 찾아낸 후에 보낸 알림에 대한 응답으로 사용자에게 제공됩니다. 플랫폼이 제안된 네트워크 중 하나에 연결할 경우, 네트워크를 제안한 앱 중 어떤 것에서 네트워크가 연결되었는지 알려주는 텍스트가 설정에 표시됩니다.
사용자 연결 해제 처리
제안된 네트워크 중 하나에 연결된 상태에서 사용자가 Wi-Fi 선택기를 사용하여 명시적으로 연결을 해제한 경우, 해당 네트워크는 24시간 동안 블랙리스트에 등록됩니다. 블랙리스트에 등록되어 있는 동안 해당 네트워크는 자동 연결 시 고려되지 않습니다. 이는 앱이 해당 네트워크에 해당하는 네트워크 제안을 삭제하고 다시 추가하더라도 적용됩니다.
앱의 승인 상태 변경
사용자가 네트워크 제안 알림을 거절하면 앱에서 CHANGE_WIFI_STATE
권한이 삭제됩니다. 사용자는 나중에 Wi-Fi 제어 메뉴(Settings > Apps & notifications > Special App access > Wi-Fi Control > App name)로 들어가 승인할 수 있습니다.