0

我正在尝试检查 Android 设备以确保它包含 T-Mobile 或 AT&T SIM(确实如此 - 我已经在 3 台带有 AT&T sim 卡的设备上对此进行了测试 - 结果相同)但是该应用程序不断显示错误声明“请插入 TMobile 或 AT&T SIM”并在此行结束:

showAlert(getString(R.string.insert_sm_dialog));

由于设备包含 AT&T Sim 卡,而不是按照应有的方式移动代码。

资源:

  @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
            int networkType = tm.getNetworkType();
            int phoneType = tm.getPhoneType();
            handler = new XmlParserHandlerFinal();
            int version = android.os.Build.VERSION.SDK_INT;
            if (phoneType == TelephonyManager.PHONE_TYPE_CDMA
                    || (phoneType != TelephonyManager.PHONE_TYPE_GSM
                    && networkType != TelephonyManager.NETWORK_TYPE_GPRS
                    && networkType != TelephonyManager.NETWORK_TYPE_EDGE
                    && networkType != TelephonyManager.NETWORK_TYPE_HSDPA
                    && networkType != TelephonyManager.NETWORK_TYPE_HSPA
                    && networkType != TelephonyManager.NETWORK_TYPE_HSPAP
                    && networkType != TelephonyManager.NETWORK_TYPE_HSUPA
                    && networkType != TelephonyManager.NETWORK_TYPE_UMTS && networkType != TelephonyManager.NETWORK_TYPE_LTE)) {
                // If the phone type is CDMA or
                // the phone phone type is not GSM and the network type is none of
                // the network types indicated in the statement
                // Display incompatibility message
                showAlert(getString(R.string.incomp_sm_dialog));
                // Network type is looked because some tablets have no phone type.
                // We rely on network type in such cases
            } else if (!(tm.getSimState() == TelephonyManager.SIM_STATE_ABSENT
                    || (tm.getSimOperator())
                    .equals(getString(R.string.numeric_tmo)) || (tm
                            .getSimOperator()).equals(getString(R.string.numeric_att)))) {
                // if SIM is present and is NOT a T-Mo network SIM,
                // display Error message alert indicating to use SM SIM
                showAlert(getString(R.string.insert_sm_dialog));
            }// No SIM or SIM with T-Mo MNC MCC present
            else if (version < VERSION_CODES.ICE_CREAM_SANDWICH) {
                // Initial UI setup for versions lower than ICS
                setContentView(R.layout.update);
                mUpdateButton = (Button) findViewById(R.id.update_button);

                mUpdateButton.setOnClickListener(this);

            } else {// ICS and up


                if ((tm.getSimOperator()).equals(getString(R.string.numeric_tmo))
                        || (tm.getSimOperator())
                        .equals(getString(R.string.numeric_att))) {
                    task = new NetworkTask();
                    task.execute("");
                    // Device has T-Mo network SIM card MCC and MNC correctly
                    // populated
                    // Reduce number of steps to 6
                    TotalSteps = 6;
                }

            }
        }
4

1 回答 1

1
} else if (!(tm.getSimState() == TelephonyManager.SIM_STATE_ABSENT
        || (tm.getSimOperator())
        .equals(getString(R.string.numeric_tmo)) || (tm
                .getSimOperator()).equals(getString(R.string.numeric_att)))) {

        // if SIM is present and is NOT a T-Mo network SIM,
        // display Error message alert indicating to use SM SIM
        showAlert(getString(R.string.insert_sm_dialog));
}// No SIM or SIM with T-Mo MNC MCC present

如果我没记错的话,此代码表示如果您插入了 SIM 卡,它将显示该消息。你正在检查SIM_STATE_ABSENT,但否定它。

  • 如果getSimState()返回不存在,那么整个事情就是true,这被否定了false

  • 如果没有getSimState()返回,则检查 TMO/ATT。如果其中任何一个真,那么这一切都被否定了。false

您应该能够通过将否定移至操作员检查来解决此问题:

} else if(tm.getSimState() == TelephonyManager.SIM_STATE_ABSENT
        || !(tm.getSimOperator().equals(getString(R.string.numeric_tmo)) 
                || (tm.getSimOperator().equals(getString(R.string.numeric_att)))) {
    // show error
}
于 2013-08-21T16:16:25.943 回答