Нет надежного способа получить номер телефона с SIM-карты.TelephonyManager считывает номер телефона с SIM-карты, но операторы Telecom могут добавить эту информацию в SIM-карту.
Большинство операторов Telecom не добавляют эту информацию в SIM-карту, поэтому она недостаточно надежна.
Существует способ использовать Google-Play-Service для получения номера телефона, но он также не гарантирует 100% возврата номера телефона.Вы можете сделать это следующим образом:
Добавить следующие зависимости в build.gradle
:
dependencies {
...
compile 'com.google.android.gms:play-services:11.6.0'
compile 'com.google.android.gms:play-services-auth:11.6.0'
}
Создать две константы в MainActivity.java
:
private static final int PHONE_NUMBER_HINT = 100;
private final int PERMISSION_REQ_CODE = 200;
В onclick
вашей кнопки добавьте следующее:
final HintRequest hintRequest =
new HintRequest.Builder().setPhoneNumberIdentifierSupported(true).build();
try {
final GoogleApiClient googleApiClient =
new GoogleApiClient.Builder(MainActivity.this).addApi(Auth.CREDENTIALS_API).build();
final PendingIntent pendingIntent =
Auth.CredentialsApi.getHintPickerIntent(googleApiClient, hintRequest);
startIntentSenderForResult(pendingIntent.getIntentSender(), PHONE_NUMBER_HINT, null, 0, 0, 0);
} catch (Exception e) {
e.printStackTrace();
}
Добавить onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PHONE_NUMBER_HINT && resultCode == RESULT_OK) {
Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
final String phoneNumber = credential.getId();
}
}