API de sugestão de Wi-Fi para conectividade com a Internet

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).