我有版本为Android 2.3.4的HTC Flyer标签。我无法通过TelephonyManager.getDeviceId()检索IMEI号。它总是返回null。
有人可以尝试在另一台设备上读出IMEI。我想知道这是Google还是HTC问题。
这是一款“GSM”设备。它是全新的,没有任何操作系统更新。
FYI, 包含的清单:
我在sumsung galaxy,Motorola xoom和所有智能手机上运行良好的程序。
答案 0 :(得分:1)
某些标签设备没有IMEI号。您可以获取设备的WI-FI MAC地址。
WifiManager wifiMan = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInf = wifiMan.getConnectionInfo();
String ID = wifiInf.getMacAddress();
答案 1 :(得分:1)
如果您使用TelephonyManager.getDeviceId()
获取null,请使用
Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);
例如:
final TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (mTelephony.getDeviceId() != null){
AndroidDeviceId = mTelephony.getDeviceId();
}
else{
AndroidDeviceId = Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);
}
即使ANDROID_ID
也不安全:
更具体地说,是Settings.Secure.ANDROID_ID。这是一个64位 设备首次启动时生成和存储的数量。它 擦除设备时重置。
ANDROID_ID似乎是唯一设备标识符的不错选择。那里 是缺点:首先,它在Android版本上并非100%可靠 2.2之前(“Froyo”)。此外,至少有一个 在主要制造商的流行手机中广泛观察到的错误, 其中每个实例都具有相同的ANDROID_ID。
但我建议使用Android Developer's Blog中建议的这种方法:Identifying App Installations:
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();
}
}
答案 2 :(得分:0)
@SuppressWarnings("rawtypes")
Class SystemProperties = null;
SystemProperties = Class.forName("android.os.SystemProperties");
//Parameters Types
@SuppressWarnings("rawtypes")
Class[] paramTypes = new Class[1];
paramTypes[0] = String.class;
Method get=null;
get = SystemProperties.getMethod("get", paramTypes);
//Parameters
Object[] params = new Object[1];
params[0] = new String("ro.gsm.imei");
IMEI = (String) get.invoke(SystemProperties, params);