En esta página:
Demo Github
En ocasiones necesitas acceder a información privada de un Smartphone o dispositivo móvil que cuente con el Sistema Operativo Android, podríamos necesitar saber el IMEI para un fin o motivo que nuestra aplicacion así lo requiera, en este articulo vamos a enseñarte a como obtener esta información.
Nota: Los Pasos para obtener el IMEI en Android 10 Q están casi al final de este Post.
Que es un IMEI ?
Es un código de identificación que tienen todos los móviles, este código no lo puede tener otro dispositivo móvil, es único a nivel internacional y a veces suele ser usado por empresas operadoras de telefonía para bloquear el equipo por robo o perdida. En Android suele usarse para restringir ciertas funciones de una aplicacion en diferentes móviles o un determinado fin.
IMEI son las iniciales de (International Mobile Equipment Identity) en español sería “Identificador Internacional de un Equipo Móvil.”
Hay equipos que vienen con este código en la parte posterior del equipo cuando se destapa lo puedes ver, pero a veces necesitamos obtenerlo dinámicamente a nivel de código, esto lo veremos en el siguiente punto.
Obtener el IMEI en Android Studio
Vamos a nuestro archivo AndroidManifest.xml y le damos permiso para que la aplicacion lea los datos internos de un equipo, agregamos la siguiente linea
1 2 3 |
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> |
Así mismo creamos el Activity GetImeiActivity que será la vista en donde mostraremos el código IMEI
El código completo de nuestro archivo AndroidManifest.xml quedaría así
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.collectivecloudperu.tutorial"> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".GetImeiActivity" android:label="@string/title_activity_get_imei" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> |
Nosotro cremos un nuevo Activity y se nos creo un archivo fragment_get_imei.xml y dentro agregamos un Relative Layout y dentro de este Layout colocaremos 2 Text View en los cuales mostraremos 2 datos uno será el Titulo y otro será el codigo IMEI. Por ultimo agregamos un boton para que al hacerle clic obtengamos el codigo IMEI.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".GetImeiActivityFragment" tools:showIn="@layout/activity_get_imei"> <TextView android:id="@+id/titulo_imei" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:gravity="center" android:text="Código IMEI:" android:textAlignment="center" android:textStyle="bold" /> <TextView android:id="@+id/mostrar_imei" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" android:textSize="30sp" android:layout_below="@+id/titulo_imei" android:layout_marginTop="20dp" android:gravity="center"/> <Button android:id="@+id/btn_obtener" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/mostrar_imei" android:layout_marginTop="20dp" android:layout_centerInParent="true" android:text="OBTENER"/> </RelativeLayout> |
Creamos un archivo llamado GetImeiActivity.java y dentro trabajaremos con 4 métodos: onCreate(), consultarPermiso(), onRequestPermissionsResult() y obtenerIMEI()
A continuación te dejamos el código completo, puedes ver que antes de iniciar cada método, explicamos que hace dicho método.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
package com.collectivecloudperu.tutorial; import android.os.Bundle; import android.view.View; import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.os.Build; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.telephony.TelephonyManager; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; public class GetImeiActivity extends AppCompatActivity { TextView mostrar_imei; Button btn_obtener; String imei; static final Integer PHONESTATS = 0x1; private final String TAG=GetImeiActivity.class.getSimpleName(); // Este método inicial llama los elementos que componen nuestro activity, textos, botón, etc. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_get_imei); mostrar_imei=(TextView)findViewById(R.id.mostrar_imei); btn_obtener=(Button)findViewById(R.id.btn_obtener); btn_obtener.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { consultarPermiso(Manifest.permission.READ_PHONE_STATE, PHONESTATS); mostrar_imei.setText(imei); } }); } // Con este método mostramos en un Toast con un mensaje que el usuario ha concedido los permisos a la aplicación private void consultarPermiso(String permission, Integer requestCode) { if (ContextCompat.checkSelfPermission(GetImeiActivity.this, permission) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(GetImeiActivity.this, permission)) { ActivityCompat.requestPermissions(GetImeiActivity.this, new String[]{permission}, requestCode); } else { ActivityCompat.requestPermissions(GetImeiActivity.this, new String[]{permission}, requestCode); } } else { imei = obtenerIMEI(); Toast.makeText(this,permission + " El permiso a la aplicación esta concedido.", Toast.LENGTH_SHORT).show(); } } // Con este método consultamos al usuario si nos puede dar acceso a leer los datos internos del móvil @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1: { // Validamos si el usuario acepta el permiso para que la aplicación acceda a los datos internos del equipo, si no denegamos el acceso if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { imei = obtenerIMEI(); } else { Toast.makeText(GetImeiActivity.this, "Has negado el permiso a la aplicación", Toast.LENGTH_SHORT).show(); } return; } } } private String obtenerIMEI() { final TelephonyManager telephonyManager= (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //Hacemos la validación de métodos, ya que el método getDeviceId() ya no se admite para android Oreo en adelante, debemos usar el método getImei() return telephonyManager.getImei(); } else { return telephonyManager.getDeviceId(); } } } |
Ejecutamos el emulador y obtenemos el código IMEI
Una ves que obtienes el código IMEI puedes usarlo para múltiples necesidades que requiera tu aplicación.
Como obtener el IMEI de un Móvil en Android 10 Q (Java)
A partir de la versión 10 de Android, han restringido el acceso a información delicada como el IMEI y otros datos más, por suerte Google nos aconseja una solución la cual te explico en el siguiente video.
Recuerda que puedes usar desde Android 9 hacia abajo el IMEI de un equipo y a partir de Android 10 un identificador como dice el video, te recomiendo no usar el IMEI directamente ya que expones la seguridad de tus usuarios, solo usalo cuando sea realmente necesario.
Notas
- Los métodos, funciones y pasos mencionados en este tutorial, pueden cambiar para futuras versiones de Android, esto no depende de Nosotros, si no de los Desarrolladores que dan Soporte a Android, estos suelen hacer cambios y mejoras en sus próximas versiones.
- Si puedes ser tan amable, escríbenos en un comentario si este código dejo de funcionar para actualizarlo con el nuevo código.
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
Síguenos en las Redes Sociales para que no te pierdas nuestros próximos contenidos.