Settings.Secure.getString(context.getContentResolver(),Settings.Secure.ANDROID_ID)返回空字符串;

时间:2019-06-25 07:42:09

标签: android robolectric

我正在使用

Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);

但是return的值为空。

有什么主意吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您是否正在使用模拟器?模拟器为此系统属性返回null / empty值。

此外,有趣的是,Android / Google还警告了有关ANDROID_ID here使用情况的警告

  

ANDROID_ID似乎是唯一设备标识符的不错选择。那里   缺点:首先,在Android版本上并非100%可靠   低于2.2(“ Froyo”)。另外,至少有一个   一家主要制造商生产的流行手机中的错误已广为人知,   每个实例具有相同的ANDROID_ID。

另外,请注意,如果您的应用定位到Android Oreo或更高版本,则此warning可能是相关的

  

注意:对于在将设备更新为以下版本之前安装的应用   版本的Android 8.0(API级别26)或更高版本,   如果先卸载应用然后重新安装,则ANDROID_ID会更改   在OTA之后。要在OTA之后执行的所有卸载中保留值   Android 8.0或更高版本,开发人员可以使用键/值备份。

答案 1 :(得分:1)

公共静态字符串getDeviceID(Context Ctx){

    String android_id = Secure.getString(Ctx.getContentResolver(),
            Secure.ANDROID_ID);
    return android_id;
}

public static String getImeiNumber(Context Ctx) {
    final TelephonyManager telephonyManager = (TelephonyManager) Ctx.getSystemService(Context.TELEPHONY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        //getDeviceId() is Deprecated so for android O we can use getImei() method
        return telephonyManager.getImei();
    } else {
        return CommonUtils.getDeviceID(Ctx);
    }

}