1. 程式人生 > >Android下獲取裝置唯一標識(UDID, DeviceID)

Android下獲取裝置唯一標識(UDID, DeviceID)

android下獲取裝置唯一標識原本非常簡單(至少不會像iOS一樣禁用這個,禁用那個),但是由於裝置的多樣性需要考慮的東西也對應複雜起來。

先附上完整程式碼

protected static final String PREFS_FILE = "gank_device_id.xml";  
    protected static final String PREFS_DEVICE_ID = "gank_device_id";
    protected static String uuid;
    static public String getUDID()
    {
    	if( uuid ==null ) {
            synchronized (GankMainActivity.class) {  
                if( uuid == null) {  
                    final SharedPreferences prefs = s_instance.getSharedPreferences( PREFS_FILE, 0);  
                    final String id = prefs.getString(PREFS_DEVICE_ID, null );  
  
                    if (id != null) {  
                        // Use the ids previously computed and stored in the prefs file  
                        uuid = id;  
                    } else {  
  
                        final String androidId = Secure.getString(s_instance.getContentResolver(), Secure.ANDROID_ID);  
  
                        // Use the Android ID unless it's broken, in which case fallback on deviceId,  
                        // unless it's not available, then fallback on a random number which we store  
                        // to a prefs file  
                        try {  
                            if (!"9774d56d682e549c".equals(androidId)) {  
                                uuid = UUID.nameUUIDFromBytes(androidId.getBytes("utf8")).toString();  
                            } else {  
                                final String deviceId = ((TelephonyManager) s_instance.getSystemService( Context.TELEPHONY_SERVICE )).getDeviceId();  
                                uuid = deviceId!=null ? UUID.nameUUIDFromBytes(deviceId.getBytes("utf8")).toString() : UUID.randomUUID().toString();  
                            }  
                        } catch (UnsupportedEncodingException e) {  
                            throw new RuntimeException(e);  
                        }  
  
                        // Write the value out to the prefs file  
                        prefs.edit().putString(PREFS_DEVICE_ID, uuid).commit();  
                    }
                }  
            }  
        }
    	return uuid;
    }

1、正常情況下可以通過((TelephonyManager) s_instance.getSystemService( Context.TELEPHONY_SERVICE )).getDeviceId();  來獲取,但是某些平板電腦此函式會返回空

2、通過 Secure.getString(s_instance.getContentResolver(), Secure.ANDROID_ID);   也可以獲取到一個id,但是android2.2或者是某些山寨手機使用這個也是有問題的,它會返回一個固定的值 9774d56d682e549c

3、如果前兩個都沒有獲取到udid,那麼就在程式啟動的時候建立一個隨機的uuid,然後儲存起來。這個算是相容方案,當然這樣的裝置並不會很多。


相關推薦

Android獲取裝置唯一標識(UDID, DeviceID)

android下獲取裝置唯一標識原本非常簡單(至少不會像iOS一樣禁用這個,禁用那個),但是由於裝置的多樣性需要考慮的東西也對應複雜起來。 先附上完整程式碼protected static final String PREFS_FILE = "gank_device_id.

android獲取裝置唯一標識

IMEI 百度百科解釋:IMEI(International Mobile Equipment Identity)是國際移動裝置身份碼的縮寫,國際移動裝備辨識碼,是由15位數字組成的“電子串號”,它與每臺行動電話機一一對應,而且該碼是全世界唯一的。每一隻行動電話機在組裝完成後都將被賦予一個全

Android獲取裝置唯一標識解決方案

關於Android裝置唯一識別符號號 前言 由於在開發中需要開發遊客模式,在使用者沒有登入的情況下必須確保裝置的唯一性,於是慣性思維想到的肯定是使用DevicesId 來作為裝置的唯一標識,用以代替使用者登入以後的唯一識別符號。 但是由於國內複雜的rom定製情況,以及使

安卓獲取渠道名渠道id Android獲取裝置唯一標識的終極解決方法,防止安卓7.0時崩潰問題

一,先說獲取渠道名(這裡以友盟為例) /* * 4.5.1新加渠道名欄位,用來傳給後臺去統計各個渠道下載量 * */ public static String getSource() { //獲取渠道名 Strin

Android獲取裝置唯一標識

話不多說,先貼程式碼 /**獲取裝置唯一標識碼
 * @param context 上下文
 * @return 裝置唯一標識碼
 */
 public static String getUDID

android獲取裝置唯一標識完美解決方案

這是Android系統為開發者提供的用於標識手機裝置的串號,也是各種方法中普適性較高的,可以說幾乎所有的裝置都可以返回這個串號,並且唯一性良好。 這個DEVICE_ID可以同通過下面的方法獲取: TelephonyManager tm = (TelephonyManager)getSystemServi

android獲取裝置唯一標識完美解決方案的思考以及實現方式

前言 由於在開發中需要開發遊客模式,在使用者沒有登入的情況下必須確保裝置的唯一性,於是慣性思維想到的肯定是使用DevicesId 來作為裝置的唯一標識,用以代替使用者登入以後的唯一識別符號。 但是由於國內複雜的rom定製情況,以及使用者許可權禁止的情況。De

iOS開發之獲取裝置唯一標識的各種方法?IDFA、IDFV、UDID分別是什麼含義?

一、UDID (Unique Device Identifier) UDID的全稱是Unique Device Identifier,顧名思義,它就是蘋果IOS裝置的唯一識別碼,它由40個字元的字母和數字組成。在很多需要限制一臺裝置一個賬號的應用中經常會用到。

Android 手機獲取物理唯一標識碼和IMEI號和IMSI號

開發者可以通過物理唯一標識碼和IMEI號 來得知 應用有多少使用者安裝,或者正在使用。 物理唯一標識碼 即 ANDROID_ID   是手機系統的唯一號碼。 IMEI號是唯一識別手機的號碼。 IMSI號是與SIM唯一對應的號碼 優缺點: 1.ANDROID_

各種獲取裝置唯一標識的方法介紹

//現在蘋果對隱私方面很嚴  很難獲取一種較好的裝置唯一識別符號方法,下面幾篇博文僅做參考: 使用UUID作為手機唯一識別符號在app刪除並重新安裝後會重新生成。當我們把第一次生成的UUID儲存到KeyChain中就能解決這個問題。  推薦大家使用SFHFKeychai

iOS獲取裝置唯一標識的八種方法

UDID UDID(Unique Device Identifier),iOS 裝置的唯一識別碼,是一個40位十六進位制序列(越獄的裝置通過某些工具可以改變裝置的 UDID),行動網路可以利用 UDID 來識別移動裝置。 許多開發者把 UDID 跟使用者的真

獲取裝置唯一標識(Unique Identifier):Windows系統

之前有做過防止使用者非法使用公司軟體的元件(軟體授權),其中基於windows系統獲取裝置唯一標誌,上任開發者獲取的唯一標識之一CPU ID已經不再唯一產生的Bug,便是參考此文修復。現記錄之。          唯一的標識一個裝置是一個基本功能,可以擁有很多應

獲取Android裝置唯一標識

唯一標識碼這東西在網路應用中非常有用,例如檢測是否重複註冊之類的。import android.provider.Settings.Secure;private String android_id = Secure.getString(getContext().getContentResolver(),

[Android][獲取Android裝置唯一標識]

1.落筆緣由 最近需要獲取能夠標誌Android裝置的唯一標識,但是由於Android系統版本不同或者root等諸多原因,造成有些裝置標識為NULL或者標識相同的問題,在網上搜索了相關資料,總結一下各種情況。 2.程式碼 import android.

Android開發 - 獲取Android設備的唯一標識碼(Android 6.0或更高)

申請 安全 地址 vat util new 應該 ret ati 在我們的APP開發中,通常需要獲取到設備的唯一標識。在Android6.0之前,有很多方法我們可以方便獲取到硬件的唯一標識,但是在Android6.0之後,Android系統大幅限制了我們獲取設備的硬件信息。

Android獲取手機唯一標識

//獲取手機唯一標識 private String getId() { StringBuilder deviceId = new StringBuilder(); // 渠道標誌 deviceId.append("a");

獲取iOS裝置唯一標識

轉自:https://www.cnblogs.com/fdyjm/p/7125710.html UDID 在之前的版本是可以被使用的,iOS5及以後,被蘋果禁止使用了(棄用了)。雖然,這個UDID用得很廣泛,但是,不得不說的是,它在慢慢的遠離開發者,不能在考慮使用UDID了。至於這個標示符是

裝置唯一標識方法(Unique Identifier):如何在Windows系統上獲取裝置唯一標識 zz

原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html          唯一的標識一個裝置是一個基本功能,可以擁有很多應用場景,比如軟體授權(如何保證你的軟體在授權後才能在特定機

Android裝置唯一標識小記

許可權: <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 測試裝置: 小米pad2,HTCd816t(有卡),華為4c(無卡),vivo X6L

Android獲取裝置唯一ID

Android的開發者在一些特定情況下都需要知道手機中的唯一裝置ID。例如,跟蹤應用程式的安裝,生成用於複製保護的DRM時需要使用裝置的唯一ID。在本文件結尾處提供了作為參考的示例程式碼片段。 範圍 本文提供有關如何讀取各種Android裝置的 ID的介紹,用以使用標