问题 - IMEI - HTC Flyer标签[电话管理器]

时间:2011-10-24 10:00:25

标签: android telephonymanager

我有版本为Android 2.3.4的HTC Flyer标签。我无法通过TelephonyManager.getDeviceId()检索IMEI号。它总是返回null。

有人可以尝试在另一台设备上读出IMEI。我想知道这是Google还是HTC问题。

这是一款“GSM”设备。它是全新的,没有任何操作系统更新。

FYI, 包含的清单:

我在sumsung galaxy,Motorola xoom和所有智能手机上运行良好的程序。

3 个答案:

答案 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);