Hace ya unas semanas publiqué un artículo que explicaba cómo se podría utilizar Telegram para averiguar el número de teléfono en el que el estaba instalada una app. En ese artículo, en el que intentaba explicar mi preocupación con el sistema de permisos en Android, como ejercicio de demostración contaba cómo usando pocos permisos se puede robar la cuenta de WhatsApp. Para averiguar el número de teléfono, lo que usé yo fue la cuenta de Telegram con el permiso GET_ACCOUNTS. Sin embargo, algunos me preguntaron que por qué no había usado, en lugar del permiso GET_ACCOUNTS, el permiso de READ_PHONE_STATE. Aquí os lo cuento.
El permiso de READ_PHONE_STATE da información a las aplicaciones que lo tienen concedido la capacidad de acceder a datos de cómo está el terminal en cada instante. Esto permite saber el tipo de red a la que está conectado el terminal en cada instante, si se está produciendo una llamada o no, si la conexión está en itinerancia, etcétera. Información, que bien utilizada pueden ayudar a gestionar la experiencia de usuario en aplicaciones.
Por ejemplo, una aplicación que reproduzca música podría parar la reproducción cuando entre una llamada, o la transferencia de datos reducirse cuando el terminal esté en itinerancia. Para que una app solicite este permiso, en el Manifest debe ir solicitado de la siguiente forma.
![]() |
Figura 1: ¿Pueden las apps saber tu número de teléfono en Android? |
El permiso de READ_PHONE_STATE da información a las aplicaciones que lo tienen concedido la capacidad de acceder a datos de cómo está el terminal en cada instante. Esto permite saber el tipo de red a la que está conectado el terminal en cada instante, si se está produciendo una llamada o no, si la conexión está en itinerancia, etcétera. Información, que bien utilizada pueden ayudar a gestionar la experiencia de usuario en aplicaciones.
![]() |
Figura 2: Información de estado del teléfono en un Android sobre Samsung Galaxy S4 |
Por ejemplo, una aplicación que reproduzca música podría parar la reproducción cuando entre una llamada, o la transferencia de datos reducirse cuando el terminal esté en itinerancia. Para que una app solicite este permiso, en el Manifest debe ir solicitado de la siguiente forma.
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>Por otro lado, este permiso también permite acceder a datos muy sensibles como la versión exacta del sistema operativo, el número de teléfono y el IMEI del terminal, lo que haría que se pudiera hacer tracking de personas para servicios de publicidad agresiva o recolección de datos de personas concretas. Con este sencillo código se podría intentar acceder al número de teléfono de un terminal.
TelephonyManager tMgr =
(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);String mPhoneNumber = tMgr.getLine1Number();
TextView textView = (TextView)findViewById(R.id.textview);textView.setText("The phone number is *" + mPhoneNumber + "*");
![]() |
Figura 3: Accediendo al número con READ_PHONE_STATE |
Sin embargo, como muchas apps lo han usado en el pasado de forma maliciosa, algunos fabricantes de terminales Android traen capado el acceso al número de teléfono, otros directamente lo cargan desde la SIM y se puede ver.
![]() |
Figura 4: Si no sale el número, con el permiso de READ_PHONE_STATE no se accede a él |
Nosotros hicimos una pequeña app [GetMyNumber] para comprobar que si el número de teléfono no aparece ahí, no hay forma de acceder vía READ_PHONE_STATE que puedes descargarte desde aquí. Visto esto, para saber si en tu terminal las apps podrían acceder a tu número de teléfono puedes irte a la ruta (en algunos terminales y versiones cambia).
Settings -> About Phone -> Status -> My Phone Number
Si allí aparece tu número de teléfono, entonces cualquier app que pida el permiso de READ_PHONE_STATE podrá consultar tu número de teléfono. Si por el contrario no sale ahí el número, entonces necesitará tirar de un truco como el de consultar la cuenta de Telegram que conté yo en el otro artículo.
![]() |
Figura 5: Más de 1.4 Millones de apps acceder a READ_PHONE_STATE |
Como os podéis imaginar, el número de apps que utilizan READ_PHONE_STATE para hacer cosas son muchas. Según nuestro Tacyt.... más de 1.4 millones. Así que si tienes un terminal Android, revisa si tu número aparece ahí o no, porque lo mejor es que no aparezca. Yo lo he probado en mi nuevo Samsung Galaxy S6 Edge y no aparecía, pero no venía mal comprobarlo. En algunos terminales se puede borrar el número, pero depende mucho del integrador.