Android – Unique ID

Alguns casos temos a necessidade de pegar um Unique ID de um dispositivo, no caso do android temos algumas maneiras porem nenhuma delas garante 100% da integridade desta numeração que se diz “Unica”.

Segue alguns exemplos:

1 – IMEI: Somente para dispositivos que possuem o recurso de telefone.

    /** Requer permissão: "android.permission.READ_PHONE_STATE"
     *
     * @param activity
     * @return
     */
    public static String getImei(Activity activity) {
        TelephonyManager tManager = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE);
        String numImei = tManager.getDeviceId();
        return numImei;
    }

2 – Pseudo-Unique ID: Este código todos os dispositivos que possuem android tem, nele você pega vários tipos de informações como versão da ROM, nome fabricante, tipo de CPU, e detalhes de hardware. Para pegar essas informações é utilizado a classe “android.os.Build” abaixo segue um exemplo para transformar em um Unique ID, você pode implementar essas informações como desejar, a classe Build contém varias informações.

   /**Não requer permissão.
     *
     * @param activity
     * @return
     */
    public static String getDeviceID(Activity activity) {
        String numDevIDShort = "35" + //utiliza os primeiros digitos de um IMEI valido.
                Build.BOARD.length() % 10 + Build.BRAND.length() % 10
                + Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10
                + Build.DISPLAY.length() % 10 + Build.HOST.length() % 10
                + Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10
                + Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10
                + Build.TAGS.length() % 10 + Build.TYPE.length() % 10
                + Build.USER.length() % 10; //13 digits
        return numDevIDShort;
    }

3 – Android ID: É considerado pouco confiável, em caso de reset de fabrica “Talvez” ele possa mudar, Essa String também pode ser alterada em caso de telefones roteados.

    /**Não requer permissão
     *
     * @param activity
     * @return
     */
    public static String getAndroidID(Activity activity) {
        String numAndroidID = Secure.getString(activity.getContentResolver(), Secure.ANDROID_ID);
        return numAndroidID;
    }

4 – Endereço MAC da WLAN: Esse é um identificador único e exclusivo, realizei alguns testes e verifiquei que se a WLAN estiver desativada as vezes retorna como null. Mas podemos considerar como um Unique ID porém é muito comum pessoas clonarem um MAC.

    /** Requer permissão: "android.permission.ACCESS_WIFI_STATE"
     *
     * @param activity
     * @return
     */
    public static String getWLAN_MAC(Activity activity) {
        WifiManager wm = (WifiManager) activity.getSystemService(Context.WIFI_SERVICE);
        String numWLANMAC = wm.getConnectionInfo().getMacAddress();
        return numWLANMAC;
    }

5 – Endereço MAC do Bluetooth: Segue a mesma descrição do item acima porem o mac é do dispositivo bluetooth não do WLAN.

    /** Requer permissão: android.permission.BLUETOOTH
     *
     * @param activity
     * @return
     */
    public static String getBTMAC(Activity activity) {
        BluetoothAdapter bluetoothAdapter = null; // Local Bluetooth adapter
        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        String numBTMAC = bluetoothAdapter.getAddress();
        return numBTMAC;
    }

Essas são algumas maneiras de você “TENTAR” identificar seu dispositivo, com esses recursos é possível criar uma chave criptografada MD5 entre muitas outras coisas, abaixo segue um exemplo de como gerar um unique id apartir das informações anteriores, este exemplo foi retirado da onde eu pegueis as tais informações acima.

    /**
     *
     * @param activity
     * @return
     * @throws NoSuchAlgorithmException
     */
    public static String getUniqueEncodeID(Activity activity) throws NoSuchAlgorithmException {

        String numLongID = getImei(activity) + getDeviceID(activity) + getAndroidID(activity) + getWLAN_MAC(activity) + getBTMAC(activity);
        // compute md5
        MessageDigest m = null;

        m = MessageDigest.getInstance("MD5");

        m.update(numLongID.getBytes(), 0, numLongID.length());
        // get md5 bytes
        byte p_md5Data[] = m.digest();
        // create a hex string
        String numLongID = new String();
        for (int i = 0; i < p_md5Data.length; i++) {
            int b = (0xFF & p_md5Data[i]);
            // if it is a single digit, make sure it have 0 in front (proper padding)
            if (b <= 0xF) {
                numLongID += "0";
            }
            // add number to string
            numLongID += Integer.toHexString(b);
        }
        // hex string to uppercase
        numLongID = numLongID.toUpperCase();
        return numLongID;
    }

FONTE:

http://www.pocketmagic.net/?p=1662

http://1.bp.blogspot.com/_hFQXQotqCt8/S6otKUxrtII/AAAAAAAAAGI/ExOsNBk_66A/s800/01-android2.jpg

Help DEV – Analista desenvolvedor Java / Android

http://helpdev.com.br/zarelli

5 thoughts on “Android – Unique ID

  1. Pingback: Android – Unique ID « Arthur Lehdermann

  2. Pingback: Buscando dispositivos bluetooth no Android « Arthur Lehdermann

  3. Pingback: Think Different – Develop | Android – Unique ID

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>