Android: Obtener número de teléfono
[bs_notification type=»warning» dismissible=»false»]Desde hace unas cuantas versiones, Whatsapp ya no sirve para esto.[/bs_notification]
Por motivos que no conozco (intuyo que por seguridad, y no me parece mal), no es posible saber el número de teléfono del usuario utilizando el SDK de Android. He oído que en algunas versiones, con algunos operadores de red o en algunos países sí, pero es una combinación extraña con la que no se puede contar. Hay otro recurso más fiable, aunque tampoco lo sea al 100%, pero es importante tenerlo en cuenta ya que para muchas situaciones sería suficiente.
Forma fiable al 100%, no existe. Hay que ser consciente de eso. Si fuera posible, el mismo Whatsapp no necesitaría que el usuario introduzca y confirme el número. Y precisamente con Whatsapp tiene que ver este pequeño truco.
Se trata de acceder a la lista de cuentas del usuario. Con la clase Account Manager se puede hacer. Si el usuario tiene Whatsapp instalado aparecerá ahí y podremos obtener el nombre de usuario, que és precisamente el número de teléfono, con prefijo uncluído.
En el AndroidManifest.xml
:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
El método:
AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();
ArrayList googleAccounts = new ArrayList();
for (Account ac : accounts) {
String acname = ac.name;
String actype = ac.type;
System.out.println("Accounts : " + acname + ", " + actype);
if(actype.equals("com.whatsapp")){
String phoneNumber = ac.name;
}
}
La idea no es mía, es de un usuario que respondió a la pregunta en Stackoverflow.
Para cualquier situación que necesite tener el número con mayor fiabilidad, será necesario preparar un sistema donde el usuario indique manualmente el número de teléfono y se verifique a través de algún método que implique a la propia tarjeta SIM, como un SMS con un código de verificación.