Проблема - IMEI - вкладка HTC Flyer [Диспетчер телефонии]

У меня есть вкладка HTC Flyer с версией Android 2.3.4. Я не могу получить номер IMEI с помощью TelephonyManager.getDeviceId (). Он всегда возвращает null.

Может кто-нибудь попробовать считать IMEI на другом устройстве. Хотелось бы узнать, проблема ли это в Google или HTC.

Это устройство GSM. И он совершенно новый, без обновлений ОС.

К вашему сведению, включенный манифест:

Мои программы на sumsung galaxy, Motorola xoom и на всех смартфонах работают нормально.


person Chitra    schedule 24.10.2011    source источник


Ответы (3)


Некоторые из устройств на вкладке не имеют номера IMEI. Вы можете получить WI-FI MAC-адрес устройства.

WifiManager wifiMan = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInf = wifiMan.getConnectionInfo();
String ID = wifiInf.getMacAddress();
person chetanmoswal    schedule 24.10.2011

если вы получаете null с TelephonyManager.getDeviceId(), используйте

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 кажется хорошим выбором для уникального идентификатора устройства. Есть и недостатки: во-первых, он не на 100% надежен на версиях Android до 2.2 («Froyo»). Кроме того, была по крайней мере одна широко наблюдаемая ошибка в популярном телефоне от крупного производителя, где каждый экземпляр имеет один и тот же ANDROID_ID.

но я рекомендую использовать этот метод, предложенный в блоге разработчиков Android: Идентификация Установки приложений:

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();
    }
}
person Jorgesys    schedule 07.01.2014

person    schedule
comment
вы уверены, что этот метод может получить imei на всех устройствах? - person pengwang; 03.01.2012