2014-11-20 6 views
0

Я разрабатываю приложение для Android, чтобы показать некоторые основные сведения., используя SystemProperties, чтобы получить серийный номер (бренд, устройство и т. Д.) На Android

Глядя на источники, я обнаружил, что android.os.Build имеет большинство необходимых значений

/** The name of the overall product. */ 
public static final String PRODUCT = getString("ro.product.name"); 

взглянуть на те ценности, на локально подключен к ПК устройства я могу adb shell getprop

[ro.product .name]: [A828t]

Это хорошо. И я вижу много значений а

Тогда при попытке чтения из Java с использованием аналогичной getString как в android.os.Build

private static String getString(String property) { 
    return SystemProperties.get(property, UNKNOWN); 
} 

Я обнаружил, что источники для Android 4.4.2 (и в 4.3, 2.3.3, как хорошо) android.jar не имеет SystemProperties внутри android.os упаковка. В то же время я могу найти его онлайн, используя grepcode.com, где он присутствует от 2.3.3 до 5.L

В чем проблема? Это android.jar не хорошо? Был ли скрыт класс SystemProperties?

+1

см: http://stackoverflow.com/questions/2641111/where-is-android-os-systemproperties – Hacketo

ответ

1

, как Hacketo связаны с Where is android.os.SystemProperties

android.os.SystemProperties скрыта, не публичный API,

, что можно увидеть на сырой версии http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/2.3_r1/android/os/SystemProperties.java/?v=source

Один из способов назвать его (хотя может быть не доступный в некоторых версиях) использует рефлексию.
Так код икэ

String serial = null;  
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { 
     serial = Build.SERIAL; 
    } else { 
     try { 
      Class<?> c = Class.forName("android.os.SystemProperties"); 
      Method get = c.getMethod("get", String.class); 
      serial = (String) get.invoke(c, "ro.serialno"); 
     } catch (Exception ignored) { 
     } 
    }