Android unique id

前端 未结 6 1659
慢半拍i
慢半拍i 2020-12-05 03:32

How do I get an unique ID from an Android phone?

Whenever I try to get the unique ID from the phone as a string it always shows android id and no other uniq

相关标签:
6条回答
  • 2020-12-05 04:03

    Here is code segment how to get androidId, unique DeviceId and Serial Number for your android phone may be it helps you.

    TelephonyManager tm = (TelephonyManager)getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
               final String DeviceId, SerialNum, androidId;
                DeviceId = tm.getDeviceId();
                SerialNum = tm.getSimSerialNumber();
                androidId = Secure.getString(getContentResolver(),Secure.ANDROID_ID);
    
                UUID deviceUuid = new UUID(androidId.hashCode(), ((long)DeviceId.hashCode() << 32) | SerialNum.hashCode());
                String mydeviceId = deviceUuid.toString();
                Log.v("My Id", "Android DeviceId is: " +DeviceId); 
                Log.v("My Id", "Android SerialNum is: " +SerialNum); 
                Log.v("My Id", "Android androidId is: " +androidId);  
    
    0 讨论(0)
  • 2020-12-05 04:03
    Settings.Secure.getString(contentResolver,Settings.Secure.ANDROID_ID);
    

    this is not a good method it will return null in some cases.

    THis piece of code will help you to generate unique pseudodevice ID .......``

        public String getDeviceID() {
    
    /*String Return_DeviceID = USERNAME_and_PASSWORD.getString(DeviceID_key,"Guest");
    return Return_DeviceID;*/
    
    TelephonyManager TelephonyMgr = (TelephonyManager) getApplicationContext().getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
    String m_szImei = TelephonyMgr.getDeviceId(); // Requires
    // READ_PHONE_STATE
    
    // 2 compute DEVICE ID
    String m_szDevIDShort = "35"
    + // we make this look like a valid IMEI
    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
    // 3 android ID - unreliable
    String m_szAndroidID = Secure.getString(getContentResolver(),Secure.ANDROID_ID);
    // 4 wifi manager, read MAC address - requires
    // android.permission.ACCESS_WIFI_STATE or comes as null
    WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();
    // 5 Bluetooth MAC address android.permission.BLUETOOTH required
    BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter
    m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    String m_szBTMAC = m_BluetoothAdapter.getAddress();
    System.out.println("m_szBTMAC "+m_szBTMAC);
    
    // 6 SUM THE IDs
    String m_szLongID = m_szImei + m_szDevIDShort + m_szAndroidID+ m_szWLANMAC + m_szBTMAC;
    System.out.println("m_szLongID "+m_szLongID);
    MessageDigest m = null;
    try {
    m = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
                    }
    m.update(m_szLongID.getBytes(), 0, m_szLongID.length());
    byte p_md5Data[] = m.digest();
    
    String m_szUniqueID = 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)
    m_szUniqueID += "0";
    // add number to string
    m_szUniqueID += Integer.toHexString(b);
    }
    m_szUniqueID = m_szUniqueID.toUpperCase();
    
    Log.i("-------------DeviceID------------", m_szUniqueID);
    Log.d("DeviceIdCheck", "DeviceId that generated MPreferenceActivity:"+m_szUniqueID);
    
    return m_szUniqueID;
    
    }
    
    0 讨论(0)
  • 2020-12-05 04:04
    ((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
    

    with manifest

    <uses-permission android:name='android.permission.READ_PHONE_STATE' />
    

    Edit:

    Here is some interesting reading about the android id:

    How to set the Android ID

    Android ID Requires Market Login

    Try setting it to something other than 'android id' and see if you read the new value.

    0 讨论(0)
  • 2020-12-05 04:12

    Unique Id

    Info adInfo = null;
    
     
    
    try {
    
         adInfo = AdvertisingIdClient.getAdvertisingIdInfo(mContext);
    
    } catch (IOException e) {
    
         ...
    
    } catch (GooglePlayServicesAvailabilityException e) {
    
         ...
    
    } catch (GooglePlayServicesNotAvailableException e) {
    
         ...
    
    }
    
     
    
    String AdId = adInfo.getId();
    

     

    0 讨论(0)
  • 2020-12-05 04:13

    Wireless MAC address is more unique than IMEI, because the later gets spoofed on stolen devices. Drawback is that it only works on WiFi enabled devices. WifiInfo

    0 讨论(0)
  • 2020-12-05 04:14

    For detailed instructions on how to get a Unique Identifier for each Android device your application is installed from, see this official Android Developers Blog posting:

    http://android-developers.blogspot.com/2011/03/identifying-app-installations.html

    It seems the best way is for you to generate one your self upon installation and subsequently read it when the application is re-launched.

    I personally find this acceptable but not ideal. No one identifier provided by Android works in all instances as most are dependent on the phone's radio states (wifi on/off, cellular on/off, bluetooth on/off). The others like Settings.Secure.ANDROID_ID must be implemented by the manufacturer and are not guaranteed to be unique.

    The following is an example of writing data to an INSTALLATION file that would be stored along with any other data the application saves locally.

    public class Installation {
        private static String sID = null;
        private static final String INSTALLATION = "INSTALLATION";
    
        public synchronized static String id(Context context) {
            if (sID == null) {  
                File installation = new File(context.getFilesDir(), INSTALLATION);
                try {
                    if (!installation.exists())
                        writeInstallationFile(installation);
                    sID = readInstallationFile(installation);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
            return sID;
        }
    
        private static String readInstallationFile(File installation) throws IOException {
            RandomAccessFile f = new RandomAccessFile(installation, "r");
            byte[] bytes = new byte[(int) f.length()];
            f.readFully(bytes);
            f.close();
            return new String(bytes);
        }
    
        private static void writeInstallationFile(File installation) throws IOException {
            FileOutputStream out = new FileOutputStream(installation);
            String id = UUID.randomUUID().toString();
            out.write(id.getBytes());
            out.close();
        }
    }
    
    0 讨论(0)
提交回复
热议问题