Os dispositivos que operam Android 10 (nível de API 29) e versões superiores permitem que o aplicativo adicione credenciais de rede para um dispositivo se conectar automaticamente a um ponto de acesso Wi-Fi. Para fornecer sugestões sobre qual rede se conectar, use WifiNetworkSuggestion
. Por fim, a plataforma escolhe qual ponto de acesso aceitar com base na entrada do seu aplicativo e de outros.
O exemplo de código a seguir mostra como fornecer credenciais para uma rede aberta, uma WPA2 e uma WPA3.
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);
As sugestões do aplicativo precisam ser aprovadas pelo usuário antes de a plataforma iniciar uma conexão com elas. Essa aprovação é fornecida pelo usuário em resposta a uma notificação na primeira vez que a plataforma encontra uma rede que corresponda a uma das sugestões do aplicativo nos resultados de verificação. Quando a plataforma se conecta a uma das sugestões de rede, as configurações mostram o texto que atribui a conexão de rede ao aplicativo correspondente que fez a sugestão.
Processamento de desconexões do usuário
Se o usuário utilizar o seletor de Wi-Fi para se desconectar explicitamente de uma das sugestões de rede quando estiver conectado a ela, a rede será adicionada à lista de bloqueios durante 24 horas. Durante o período nessa lista, a rede não será considerada para conexão automática, mesmo se o aplicativo remover e adicionar novamente a sugestão correspondente à rede.
Alteração do status de aprovação para o aplicativo
Um usuário que recusa a notificação de sugestão de rede remove a permissão CHANGE_WIFI_STATE
do aplicativo. O usuário pode conceder essa aprovação posteriormente por meio do menu de controle de Wi-Fi (Configurações > Aplicativos e Notificações > Acesso especial a apps > Controle de Wi-Fi > Nome do aplicativo).