TelephonyManager возвращает ноль во фрагменте

Я пытаюсь получить идентификатор устройства из диспетчера телефонии в своем приложении, но получаю исключение нулевого указателя. Я отладил его, и объект TelephonyManger имеет значение null при создании экземпляра. Я нашел несколько решений по этому поводу, но я уже сделал все это. Я также дал соответствующее разрешение в файле манифеста.

Вот мой код

TelephonyManager TM=(TelephonyManager)getActivity. getSystemService(android.cotent.Context.TELEPHONY_SERVICE);
id=TM.getDeviceId();

Разрешение в манифесте

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

person Vivek Mishra    schedule 05.03.2016    source источник


Ответы (1)


Документ Javadoc для getSystemService( ) говорит, что может возвращать значение null, если это не поддерживаемая системная служба. Поэтому в этом случае вы должны всегда проверять значение null и действовать соответствующим образом.

person Doug Stevenson    schedule 05.03.2016
comment
Я проверил это, и он возвращает true - person Vivek Mishra; 05.03.2016
comment
Эм, нет, ты этого не сделал. Если вы не показываете неправильный код. - person Doug Stevenson; 05.03.2016
comment
Я проверил с помощью hasSystemFeature, и он возвращает true - person Vivek Mishra; 05.03.2016
comment
Вы все еще не показываете код. Я понятия не имею, что вы проверяете и что вы ожидаете. - person Doug Stevenson; 05.03.2016
comment
PackageManager pm = this.getPackageManager(); boolean hasTelephony=pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY); hasTelephony возвращает значение true - person Vivek Mishra; 05.03.2016
comment
Где в документации вы видите, что проверка должна гарантировать, что служба возвращает ненулевое значение? Это может быть проблема с устройством. - person Doug Stevenson; 05.03.2016
comment
Неважно сейчас. Я получил решение. Проблема в том, что я тестировал его на телефоне без сим-карты, но с устройством с сим-картой он показывает идентификатор устройства. - person Vivek Mishra; 05.03.2016
comment
Итак, как я уже сказал в своем ответе, вы всегда должны проверять значение null. - person Doug Stevenson; 05.03.2016