Ответ 1
public static String getManufacturerSerialNumber() {
String serial = null;
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class, String.class);
serial = (String) get.invoke(c, "ril.serialnumber", "unknown");
} catch (Exception ignored) {}
return serial;
}
Изменить: прошло с момента ответа, здесь несколько обновленных точек:
- OP спросил о Galaxy Tab 2, и для этого на самом деле ответ был
ril.serialnumber
(даже для модели не-3G - см. это gist). В соответствии с ответом Himanshu Galaxy Tab 3 используетsys.serialnumber
(также под этот ответ).sys.serialnumber
имеет смысл для планшетов, посколькуril.*
означает Radio Interface Layer, то, что большинство планшетов не оснащено (ril.serialnumber
, соответственно, имеет смысл для телефонов). - Нет стандартного API для получения серийного номера устройства (то есть серийный номер на упаковке - не путать с
Settings.Secure.ANDROID_ID
или различными другими "уникальными" идентификаторами, разбросанными по API). Это означает, что изготовитель должен решить, где хранить серийный номер устройства (если вообще). На S3 Mini онril.serialnumber
, на NexusOne онro.serialno
(gist), на вкладке Galaxy Tab 2ril.serialnumber
, на вкладке Galaxy Tab 3/4 онаsys.serialnumber
, на вкладке Lenovo она ничего из вышеперечисленного. Эти установки являются обычными подозреваемыми при поиске серийного устройства, но не должны восприниматься как должное, и поэтому не следует полагаться на отслеживание уникальных установок приложений.