DeviceID() показывает мне нулевой указатель?

#android #telephony

#Android #телефония

Вопрос:

я разрабатываю приложение, в котором мне просто нужен IMIE номер устройства…

Я пытался:

 telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
        imie = telephonyManager.getDeviceId();
  

В самом простом:

 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  

Позвольте мне сказать, если это требует каких-либо других действий??

заранее спасибо.

Комментарии:

1. Вы используете эмулятор и запускаете это приложение на эмуляторе ?..

2. Вы тестируете на эмуляторе? На эмуляторе это даст нулевой указатель.

Ответ №1:

Я думаю, вы все делаете правильно, но, согласно блогу разработчиков Android:

Мы видели несколько экземпляров производственных телефонов, для которых реализация дает ошибки и возвращает мусор, например нули или звездочки.

Кроме того, это, вероятно, не будет работать на эмуляторе.

Комментарии:

1. до того, как однажды он выдаст мне «000000000» вот так

Ответ №2:

Это не номер IMIE для устройства, но если вам просто нужен идентификатор устройства, вы также можете попробовать Build.SERIAL . Например getDeviceId() , значение не всегда может быть уникальным или доступным, но это еще один вариант, который можно попробовать, когда первый метод завершается неудачей.

Ответ №3:

следующее может не работать должным образом на эмуляторе..

 TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String szImei = TelephonyMgr.getDeviceId(); // Requires READ_PHONE_STATE
  

Теперь иногда требуется получить уникальный номер с нетелефонного устройства (например, планшета), в то время как мы можем создать псевдоуникальный идентификатор, который работает на всех устройствах Android, который дает уникальный номер, такой как IMIE. Идентификатор, вычисленный таким образом, не будет уникальным: можно найти два устройства с одинаковым идентификатором (на основе одного и того же аппаратного обеспечения и образа ПЗУ), но шансы в реальных приложениях ничтожно малы. Для этой цели вы можете использовать класс Build:

 String PUID = Build.BOARD.length()  Build.BRAND.length()  
            Build.CPU_ABI.length()   Build.DEVICE.length()  
            Build.DISPLAY.length()   Build.HOST.length()  
            Build.ID.length()   Build.MANUFACTURER.length()  
            Build.MODEL.length()   Build.PRODUCT.length()  
            Build.TAGS.length()   Build.TYPE.length()  
            Build.USER.length() ;
  

PUID вернет 13-значный номер, и мы добавляем еще два впереди (35), чтобы иметь идентификатор того же размера, что и IMEI (15 цифр).).

  PUID = "35"   PUID;
  

и замечательно, что нам не нужно добавлять разрешение READ_PHONE_STATE, используя приведенный выше код.

Для получения дополнительной помощи в генерации уникального номера посетите pocket magic.