как проверить, доступен ли введенный пользователем номер мобильного телефона на том же устройстве или нет в Android программно - PullRequest
0 голосов
/ 27 июня 2019

Я работаю над приложением, которое требует, чтобы пользователь вводил свой номер телефона при регистрации, и этот номер должен присутствовать на том же устройстве. Есть ли способ найти его?

Я уже проверил с TelephonyManager, но это не гарантирует, что всегда получит номер:

private void getMobileNumber() {

    TelephonyManager tMgr = (TelephonyManager) 
    mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
    String mPhoneNumber = tMgr.getLine1Number();

}

Я тоже проверял с SubscriptionManager, и это тоже не гарантирует:

private void GetCarriorsInformation() {

       ArrayList<string Numbers = new ArrayList<>();
       SubscriptionManager mSubscriptionManager = SubscriptionManager.from(context);
      List<SubscriptionInfo> subInfoList = mSubscriptionManager.getActiveSubscriptionInfoList();
        if (subInfoList.size() > 1) {
            isMultiSimEnabled = true;
        }
        for (SubscriptionInfo subscriptionInfo : subInfoList) {
            Numbers.add(subscriptionInfo.getNumber());
        }

  }

Есть ли другой способ проверить, присутствует ли номер телефона на том же устройстве или нет?

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Не совсем, но еще один способ запросить номер телефона, используя подсказку API.Вам не нужно, чтобы пользователь вводил их номер.Они могут напрямую выбрать номер, доступный на устройстве.

 private GoogleApiClient apiClient;
 private static final int RC_HINT = 1000;

private void requestHint() {
    apiClient = new GoogleApiClient.Builder(this)
            .addApi(Auth.CREDENTIALS_API)
            .build();

    CredentialPickerConfig conf = new CredentialPickerConfig.Builder()
            .setShowAddAccountButton(true)
            .build();

    HintRequest hintRequest = new HintRequest.Builder()
            .setPhoneNumberIdentifierSupported(true)
            .setHintPickerConfig(conf)
            .build();

    PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(
            apiClient, hintRequest);
    try {
        startIntentSenderForResult(intent.getIntentSender(),
                RC_HINT, null, 0, 0, 0);

    } catch (IntentSender.SendIntentException e) {
        e.printStackTrace();
    }
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_HINT && resultCode == RESULT_OK) {
        Credential cred = data.getParcelableExtra(Credential.EXTRA_KEY);
        Toast.makeText(this, "Number = " + cred.getId(), 
     Toast.LENGTH_LONG).show();
  }
}
0 голосов
/ 27 июня 2019

Вы не можете получить номер телефона с помощью кода, но вы можете проверить или подтвердить, что номер находится на том же устройстве, даже используя Метод аутентификации Firebase .

  PhoneAuthProvider.getInstance().verifyPhoneNumber(
                username,
                60,
                TimeUnit.SECONDS,
                RegisterActivity.this,
                new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
                    @Override
                    public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                        Intent data = new Intent();
                        data.putExtra(StaticConfig.STR_EXTRA_USERNAME, phoneNumber);
                        data.putExtra(StaticConfig.STR_EXTRA_PASSWORD, userPassword);
                        data.putExtra(StaticConfig.STR_EXTRA_CREDENTIAL, phoneAuthCredential);
                        data.putExtra(StaticConfig.STR_EXTRA_ACTION, STR_EXTRA_ACTION_REGISTER);
                        setResult(RESULT_OK, data);
                        finish();
                    }

                    @Override
                    public void onVerificationFailed(FirebaseException e) {
                        avi.hide();
                        String exception = e.getMessage();
                        Toast.makeText(RegisterActivity.this, exception, Toast.LENGTH_SHORT).show();
                      showSnackBar("Kindly provide mobile number used in this phone");
                        editTextUserPhone.setEnabled(true);
                    }

                    @Override
                    public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                        super.onCodeSent(s, forceResendingToken);
                        codeSent = s;
                    }
                }

on verifyStateChangedCallbacks ищет входящие сообщения, и, если номер находится на том же устройстве, вызывается метод.

перейдите по этой ссылке для получения более подробной информации и документации для Аутентификации в Firebase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...