Об ошибке при нулевой проверке менеджера телефонии на конкретном устройстве - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь сохранить их телефонные номера после проверки разрешений и состояния USIM.

В методах onCreate (), Инициализированная глобальная переменная TelephonyManager.

mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

TelephonyManager инициализирован, но выбрал Null onконкретное устройство (Galaxy S3).

// Null value confirmed here even though initialized
if(mTelephonyManager != null) {
    if (mTelephonyManager.getSimState() == TelephonyManager.SIM_STATE_ABSENT 
        || mTelephonyManager.getSimState() == TelephonyManager.SIM_STATE_UNKNOWN) {
        // not USIM
        numFlag = false;
        finish();
    } else if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) 
                != PackageManager.PERMISSION_GRANTED) {
        //Permission Check
        numFlag = false;
        finish();
    } else {
        // For security reasons, test in the following ways
        if (TextUtils.isEmpty(SharedUtil.getInstance().getString(this, "phoneNumber"))) {
            // PhoneNumber Init...
        } else {
            // Data Saved...
        }
    }
}else{
    Toast.makeText(SmartIdActivity.this, "Unable to save phone number.", Toast.LENGTH_LONG).show();
    finish();
}

Я не прав или это особая проблема?

1 Ответ

0 голосов
/ 18 февраля 2019

Некоторые устройства возвращают ноль, если на них не установлена ​​сим-карта.Некоторые устройства выдают исключение, когда вы пытаетесь вызвать следующий код:

TelephonyManager telMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

Итак, вам нужно обработать оба из них.Как то так:

private boolean isSimCardAvailable() {
  try {
    TelephonyManager telMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    if (telMgr == null) return false;
    int simState = telMgr.getSimState();
    switch (simState) {
      case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
      case TelephonyManager.SIM_STATE_PIN_REQUIRED:
      case TelephonyManager.SIM_STATE_PUK_REQUIRED:
      case TelephonyManager.SIM_STATE_READY:
      case TelephonyManager.SIM_STATE_NOT_READY:
        return true;
      case TelephonyManager.SIM_STATE_UNKNOWN:
      case TelephonyManager.SIM_STATE_ABSENT:
        //SIM card state: SIM Card Error, permanently disabled
      case TelephonyManager.SIM_STATE_PERM_DISABLED:
        // SIM card state: SIM Card Error, present but faulty
      case TelephonyManager.SIM_STATE_CARD_IO_ERROR:
        // SIM card state: SIM Card restricted, present but not usable due to
        //carrier restrictions.
      case TelephonyManager.SIM_STATE_CARD_RESTRICTED:
        return false;

      default:
        return false;
    }
  } catch (Exception e) {
    Log.e("TAG", "Exception e = " + e.toString());
    return false;
  }
}
...