Como obtener el IMEI de un Móvil en Android Studio

Publicado el 24 julio 2018 por Juan Ricardo Castro Lurita @pepoflex

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.

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.

imagen: atlantico.net

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

<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í

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://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.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://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()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.

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;

    public static ArrayList<String> numbers;

    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);


        numbers = new ArrayList<String>();

        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.

Síguenos en las Redes Sociales para que no te pierdas nuestros próximos contenidos.