Я запрограммировал проект (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);
}