Как получить номер телефона или информацию о SIM-карте с помощью Android Studio? - PullRequest
0 голосов
/ 17 мая 2018

Как получить номер телефона или информацию о сим-карте, используя Android Studio? (симкарта 1 или 2)

Я использовал этот код:

TelephonyManager tMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
phone_number.setText(tMgr.getLine1Number());

И я также добавил разрешения в AndroidManifest:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

Но все применяемые мной гаджеты не могут получить номер телефона или всегда генерируют нулевое значение.

И это build.gradle, который я использую:

dependencies {
   implementation fileTree(dir: 'libs', include: ['*.jar'])
   //noinspection GradleCompatible
   implementation 'com.android.support:appcompat-v7:27.1.1'
   implementation 'com.android.support.constraint:constraint-layout:1.1.0'
   //noinspection GradleCompatible
   implementation 'com.google.android.gms:play-services-maps:15.0.1'
   implementation 'com.google.android.gms:play-services-location:15.0.1'
   testImplementation 'junit:junit:4.12'
   androidTestImplementation 'com.android.support.test:runner:1.0.2'
   androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

   //noinspection UseOfBundledGooglePlayServices
   implementation 'com.google.android.gms:play-services:12.0.1'
   implementation 'com.google.android.gms:play-services-auth:15.0.1'
}

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Это несколько методов, которые вы можете использовать:

mTelephonyMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);;

String countryiso=mTelephonyMgr.getSimCountryIso();

String simOperator=mTelephonyMgr.getSimOperator();

String  simOperatorName=mTelephonyMgr.getSimOperatorName();

String  simSerialNo=mTelephonyMgr.getSimSerialNumber();

int     simState=mTelephonyMgr.getSimState();

String  subscriberID=mTelephonyMgr.getSubscriberId();

Редактировать

  String mPhoneNumber = mTelephonyMgr.getLine1Number();

для более, посетите здесь.

Это разрешение также необходимо.

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

Надеюсь, это поможет.

0 голосов
/ 17 мая 2018

Нет надежного способа получить номер телефона с 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();
    }
}
...