Как я могу исправить код получения номера телефона для запуска на моем реальном устройстве? - PullRequest
0 голосов
/ 28 февраля 2019

Я запрограммировал проект (minSDKVersion: 15), чтобы получить номер телефона, и когда я запускаю на AVD Android Studio (API 26), он работает нормально.Но когда я запускаю свое реальное устройство (версия для Android: 4.4.2), я нажимаю кнопку «Нажми меня», затем оно ломается, и появляется сообщение «К сожалению, мое приложение остановилось».Я не знаю, что мое устройство не подходит версия или что не так?Мой код:

Button btnStart;
TextView varText;
String info;
String strPhoneType = "";
static final int PERMISSION_READ_STATE = 123;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void Start(View view) {
    int permissionClick = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
    if (permissionClick == PackageManager.PERMISSION_GRANTED) {
        MyTelephonyManager();
    } else {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.READ_PHONE_STATE}, PERMISSION_READ_STATE);
    }
}

Метод переопределения для запроса разрешения на чтение номера телефона:

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode){
        case PERMISSION_READ_STATE:
        {
            if(grantResults.length >= 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                MyTelephonyManager();
            } else {
                Toast.makeText(this, "You don't have required permisson to make the Action", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

Способ получения информации о телефоне, включая номер телефона:

private void MyTelephonyManager(){
    TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    int phoneType = manager.getPhoneType();
    switch (phoneType){
        case (TelephonyManager.PHONE_TYPE_CDMA):
            strPhoneType = "CDMA";
            break;
        case (TelephonyManager.PHONE_TYPE_GSM):
            strPhoneType = "GSM";
            break;
        case (TelephonyManager.PHONE_TYPE_NONE):
            strPhoneType = "None";
            break;
    }

    boolean isRoaming = manager.isNetworkRoaming();
    String PhoneType = strPhoneType;
    String IMEINumber = manager.getImei();
    String subcriberID = manager.getSubscriberId();
    String simSerialNumber = manager.getSimSerialNumber();
    String networkCountryISO = manager.getNetworkCountryIso();
    String simCountryISO = manager.getSimCountryIso();
    String softwareVersion = manager.getDeviceSoftwareVersion();
    String voiceMailNumber = manager.getVoiceMailNumber();

    info = "Phone details: \n";
    info += "\n Phone Network type: " + PhoneType;
    info += "\n IMEINumber: " + IMEINumber;
    info += "\n subcriberID: " + subcriberID;
    info += "\n simSerialNumber: " + simSerialNumber;
    info += "\n networkCountryISO: " + networkCountryISO;
    info += "\n simCountryISO: " + simCountryISO;
    info += "\n softwareVersion: " + softwareVersion;
    info += "\n voiceMailNumber: " + voiceMailNumber;
    info += "\n isRoaming: " + isRoaming;

    btnStart = (Button) findViewById(R.id.idBtnStart);
    varText = (TextView) findViewById(R.id.idTxtView);
    varText.setText(info);
}
...