Tenho um código em meu aplicativo que detecta se o Wi-Fi está conectado ativamente. Esse código aciona uma RuntimeException se o modo avião estiver habilitado. Eu gostaria de exibir uma mensagem de erro separada quando estiver neste modo de qualquer maneira. Como posso detectar com segurança se um dispositivo Android está no modo avião?
92
Respostas:
fonte
Settings.Global
.android.intent.action.AIRPLANE_MODE
, uma vez que a mudança de modo leva tempo para ser concluída. VerifiqueIntent.ACTION_AIRPLANE_MODE_CHANGED
se você deseja fazer isso.Ao estender a resposta de Alex para incluir a verificação de versão do SDK, temos:
fonte
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
antes do método.E se você não quiser pesquisar se o modo avião está ativo ou não, você pode registrar um BroadcastReceiver para o intent SERVICE_STATE e reagir a ele.
Em seu ApplicationManifest (pré-Android 8.0):
ou programaticamente (todas as versões do Android):
E, conforme descrito nas outras soluções, você pode consultar o modo avião quando seu receptor foi notificado e lançar sua exceção.
fonte
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
/<action android:name="android.intent.action.AIRPLANE_MODE" />
boolean isPlaneModeOn = intent.getBooleanExtra("state", false);
O booleanoisPlaneModeOn
serátrue
se o usuário ligou o modo avião oufalse
se ele está desligadoAo registrar o Modo Avião
BroadcastReceiver
(resposta @saxos), acho que faz muito sentido obter o estado da configuração do Modo Avião imediatamente aIntent Extras
fim de evitar chamadasSettings.Global
ouSettings.System
:fonte
A partir daqui :
fonte
a fim de se livrar da reclamação de depreciação (ao direcionar o API17 + e não se importar muito com a compatibilidade com versões anteriores), é necessário comparar com
Settings.Global.AIRPLANE_MODE_ON
:ao considerar API inferior:
fonte
No Oreo, não use o modo de avião broadCastReceiver. é uma intenção implícita. foi removido. Aqui está a lista de exceções atual . não está na lista no momento, portanto, não receberá dados. Considere-o morto.
conforme declarado por outro usuário acima, use o seguinte código:
fonte
Receptor de transmissão estática
Código de manifesto:
Código Java: arquivo Java do Broadcast Receiver
OU
Receptor de transmissão dinâmica
Código Java: arquivo java de atividade
Registre o receptor de transmissão no aplicativo aberto sem necessidade de adicionar o código no manifesto se você realizar uma ação apenas quando sua atividade for aberta, como verificar o modo avião, estiver ativado ou desativado ao acessar a Internet, etc.
Código Java: arquivo Java do Broadcast Receiver
fonte
Do nível de API - 17
fonte
Escrevi esta aula que pode ser útil. Ele não retorna diretamente um booleano para informar se o Modo Avião está habilitado ou desabilitado, mas irá notificá-lo quando o Modo Avião for alterado de um para o outro.
Uso
fonte
Aqui está a única coisa que funcionou para mim (API 27):
Onde
br
está seu BroadcastReceiver. Eu acredito que com as recentes mudanças na permissão agora ambosConnectivityManager.CONNECTIVITY_ACTION
eIntent.ACTION_AIRPLANE_MODE_CHANGED
são necessários.fonte
Desde o Jelly Bean (código de compilação 17), este campo foi movido para as configurações globais. Assim, para obter a melhor compatibilidade e robustez temos que cuidar de ambos os casos. O exemplo a seguir foi escrito em Kotlin.
Esta é a versão do código anterior do Jelly Bean.
fonte
Você pode verificar se a internet está ligada
}
fonte