Android уникальный идентификатор - PullRequest
9 голосов
/ 25 июня 2010

Как получить уникальный идентификатор с телефона Android?

Всякий раз, когда я пытаюсь получить уникальный идентификатор с телефона в виде строки, он всегда показывает идентификатор Android и никаких других уникальныхшестнадцатеричные значения.

Как мне его получить?

Это код, который я использую для получения идентификатора до сих пор:

String id=Settings.Secure.getString(contentResolver,Settings.Secure.ANDROID_ID);
Log.i("Android is is:",id);

вывод, который я получаювот так:

Android id is: android id

Я использую Nexus One для тестирования.

Ответы [ 6 ]

17 голосов
/ 02 августа 2011

Подробные инструкции о том, как получить уникальный идентификатор для каждого устройства Android, с которого установлено приложение, см. В официальном сообщении блога разработчиков Android:

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

Похоже, что лучший способ для вас - создать свой собственный файл после установки и впоследствии прочитать его при повторном запуске приложения.

Лично я считаю это приемлемым, но не идеальным.Ни один идентификатор, предоставляемый Android, не работает во всех случаях, так как большинство из них зависят от состояния радиосвязи телефона (вкл / выкл wifi, вкл / выкл сотовой связи, вкл / выкл bluetooth).Другие, такие как Settings.Secure.ANDROID_ID, должны быть реализованы производителем и не обязательно должны быть уникальными.

Ниже приведен пример записи данных в файл INSTALLATION, который будет храниться вместе с любыми другими даннымиприложение сохраняет локально.

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();
    }
}
4 голосов
/ 25 июня 2010
((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();

с манифестом

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

Редактировать:

Вот интересное прочтение об идентификаторе андроида:

Как установить идентификатор Android

Идентификатор Android требует входа в систему Market

Попробуйте установить для него значение, отличное от «android id», и посмотрите, прочитали ли вы новое значение.

2 голосов
/ 21 июля 2011

Вот сегмент кода, как получить androidId, уникальный DeviceId и серийный номер для вашего телефона Android, может быть, это поможет вам.

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);  
1 голос
/ 24 апреля 2012
Settings.Secure.getString(contentResolver,Settings.Secure.ANDROID_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;

}
1 голос
/ 25 июня 2010

Беспроводной MAC-адрес является более уникальным, чем IMEI, потому что последний может быть подделан на украденных устройствах. Недостатком является то, что он работает только на устройствах с поддержкой WiFi. WifiInfo

0 голосов
/ 18 февраля 2015

уникальный идентификатор

Info adInfo = null;

 

try {

     adInfo = AdvertisingIdClient.getAdvertisingIdInfo(mContext);

} catch (IOException e) {

     ...

} catch (GooglePlayServicesAvailabilityException e) {

     ...

} catch (GooglePlayServicesNotAvailableException e) {

     ...

}

 

String AdId = adInfo.getId();

1004 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...