Como posso obter programaticamente o número de telefone do dispositivo que está executando meu aplicativo Android?
443
Como posso obter programaticamente o número de telefone do dispositivo que está executando meu aplicativo Android?
Respostas:
Código:
Permissão necessária:
Ressalvas:
De acordo com os comentários altamente votados, há algumas ressalvas a serem observadas. Isso pode retornar
null
ou""
até mesmo"???????"
, e pode retornar um número de telefone obsoleto que não é mais válido. Se você deseja algo que identifique exclusivamente o dispositivo, use-ogetDeviceId()
.fonte
null
. Dito isto, não estou ciente de uma resposta melhor.Não há solução garantida para esse problema porque o número de telefone não está fisicamente armazenado em todos os cartões SIM ou transmitido da rede para o telefone. Isso é especialmente verdadeiro em alguns países que exigem verificação de endereço físico, com a atribuição de números somente depois. A atribuição do número de telefone acontece na rede - e pode ser alterada sem a alteração do cartão ou dispositivo SIM (por exemplo, é assim que a porta é suportada).
Sei que é doloroso, mas provavelmente a melhor solução é pedir ao usuário para digitar seu número de telefone uma vez e armazená-lo.
fonte
Atualização: esta resposta não está mais disponível, pois o Whatsapp parou de expor o número de telefone como nome da conta, desconsidere esta resposta.
Na verdade, você pode considerar uma solução alternativa, se não conseguir obtê-la através do serviço de telefonia.
A partir de hoje, você pode confiar em outro grande aplicativo WhatsApp, usando
AccountManager
. Milhões de dispositivos têm esse aplicativo instalado e, se você não conseguir obter o número de telefoneTelephonyManager
, poderá tentar.Permissão:
Código:
Verifique
actype
a conta do WhatsAppClaro que você pode não conseguir se o usuário não instalou o WhatsApp, mas vale a pena tentar de qualquer maneira. E lembre-se de que você deve sempre pedir confirmação ao usuário.
fonte
Conforme publicado na minha resposta anterior
Use o código abaixo:
No AndroidManifest.xml, dê a seguinte permissão:
Mas lembre-se, esse código nem sempre funciona, pois o número do celular depende do cartão SIM e da operadora de rede / operadora de celular.
Além disso, tente verificar Telefone -> Configurações -> Sobre -> Identidade do telefone . Se você conseguir visualizar o número lá, a probabilidade de obter o número de telefone do código acima é maior. Se você não conseguir visualizar o número de telefone nas configurações, não poderá obter esse código!
Solução sugerida:
Execute as 4 etapas acima como uma atividade única durante o primeiro lançamento do aplicativo. Posteriormente, sempre que for necessário um número de telefone, use o valor disponível na preferência compartilhada.
fonte
É assim que você solicita um número de telefone por meio da API do Play Services sem a permissão e os hacks. Fonte e exemplo completo .
No seu build.gradle (versão 10.2.xe superior):
Na sua atividade (o código é simplificado):
Isso irá gerar um diálogo como este:
fonte
Código extraído de http://www.androidsnippets.com/get-my-phone-number
fonte
Existe uma nova API do Android que permite ao usuário selecionar seu número de telefone sem a necessidade de permissão. Dê uma olhada em: https://android-developers.googleblog.com/2017/10/effective-phone-number-verification.html
fonte
Só quero adicionar um pouco aqui às explicações acima nas respostas acima. O que economizará tempo para os outros também.
No meu caso, esse método não retornou nenhum número de celular, uma string vazia foi retornada. Foi devido ao caso que eu tinha portado meu número no novo sim. Portanto, se eu entrar em Configurações> Sobre o telefone> Status> Meu número de telefone, ele me mostrará "Desconhecido".
fonte
Às vezes, o código abaixo retorna
null
ou string em branco.Com permissão abaixo
Existe outra maneira de obter seu número de telefone. Eu não testei isso em vários dispositivos, mas o código acima não funciona sempre.
Experimente o código abaixo:
Você precisará adicionar essas duas permissões.
Espero que isso ajude, obrigado!
fonte
String s1
será o número de telefone.Esta é uma resposta mais simplificada:
fonte
Em primeiro lugar, obter o número de celular dos usuários é contra a política ética, antes era possível, mas agora, de acordo com minha pesquisa, não há uma solução sólida disponível para isso. Ao usar algum código, é possível obter o número de celular, mas não há garantia de que funcione. apenas em alguns dispositivos. Após muita pesquisa, encontrei apenas três soluções, mas elas não estão funcionando em todos os dispositivos.
Existe a seguinte razão pela qual não estamos recebendo.
1.O dispositivo Android e o novo cartão SIM não armazenam número de celular se o número do celular não estiver disponível no dispositivo e no sim, como é possível obter o número, se algum cartão SIM antigo tiver número de celular e usar o gerenciador de telefonia, podemos obter o número outro sábio, ele retornará o "nulo" ou "" ou "??????"
fonte
TelephonyManager
não é a solução certa, porque em alguns casos o número não é armazenado no SIM. Sugiro que você use a preferência compartilhada para armazenar o número de telefone do usuário pela primeira vez que o aplicativo estiver aberto e o número será usado sempre que você precisar.fonte
Aqui está uma combinação das soluções que encontrei (exemplo de projeto aqui , se você também quiser verificar o preenchimento automático):
manifesto
build.gradle
MainActivity.kt
fonte
Uma pequena contribuição. No meu caso, o código lançou uma exceção de erro. Eu precisava colocar uma anotação para que o código fosse executado e corrija esse problema. Aqui deixo esse código.
fonte
Embora seja possível ter várias contas de correio de voz, ao ligar a partir do seu próprio número, as operadoras o encaminham para o correio de voz. Então,
TelephonyManager.getVoiceMailNumber()
ouTelephonyManager.getCompleteVoiceMailNumber()
, dependendo do sabor que você precisa.Espero que isto ajude.
fonte
Adicione esta dependência:
implementation 'com.google.android.gms:play-services-auth:18.0.0'
Para buscar a lista de números de telefone, use este:
Depois de tocar na caixa de diálogo "play services":
fonte
enquanto trabalhava em um aplicativo de segurança que precisava obter o número de telefone de quem quer que meu telefone estivesse em suas mãos, eu tive que fazer isso; 1. receba a inicialização concluída e tente obter o Line1_Number do telephonyManager, que retorna um resultado de sequência. 2. compare o resultado da String com o meu próprio número de telefone e, se eles não corresponderem ou retornarem nulos, 3. envie secretamente um SMS contendo o resultado da string, além de um sinal especial para o número do meu escritório. 4. Se o envio da mensagem falhar, inicie um serviço e continue tentando após cada hora até que a intenção pendente do SMS enviado retorne com êxito. Com essas etapas, eu poderia obter o número da pessoa usando meu telefone perdido. não importa se a pessoa é cobrada.
fonte