Question

Comment puis-je obtenir le programme numéro de téléphone de l'appareil qui exécute mon application Android?

Était-ce utile?

La solution

Code:

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

Autorisation requise:

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

Avertissements:

D'après les commentaires très upvoted, il y a quelques mises en garde à connaître. Cela peut revenir null ou "" ou même "???????", et il peut retourner un numéro de téléphone périmé qui n'est plus valide. Si vous voulez quelque chose qui identifie l'appareil, vous devez utiliser getDeviceId() à la place.

Autres conseils

Il n'y a pas de solution garantie à ce problème car le numéro de téléphone ne sont pas physiquement sur toutes les cartes SIM, ou diffusée à partir du réseau au téléphone. Cela est particulièrement vrai dans certains pays soumis à la vérification de l'adresse physique, avec l'attribution de numéros ne se passe par la suite. attribution d'un numéro de téléphone qui se passe sur le réseau - et peut être modifié sans changer la carte SIM ou un périphérique (par exemple comment ce portage est pris en charge)

.

Je sais que c'est la douleur, mais très probablement la meilleure solution est juste pour demander à l'utilisateur d'entrer dans son / son numéro de téléphone une fois et de le stocker.

Mise à jour: Cette réponse est plus disponible que WhatsApp avait cessé d'exposer le numéro de téléphone comme nom de compte, ne pas tenir compte de bien vouloir cette réponse

.

Il est en fait une solution de rechange, vous pouvez envisager, si vous ne pouvez pas l'obtenir par le service de téléphonie.

A partir d'aujourd'hui, vous pouvez compter sur une autre grosse application WhatsApp, en utilisant AccountManager. Des millions d'appareils ont cette application installée et si vous ne pouvez pas obtenir le numéro de téléphone via TelephonyManager, vous pouvez donner ce coup.

Autorisation:

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

Code:

AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();

for (Account ac : accounts) {
    String acname = ac.name;
    String actype = ac.type;
    // Take your time to look at all available accounts
    System.out.println("Accounts : " + acname + ", " + actype);
}

Vérifiez actype pour le compte WhatsApp

if(actype.equals("com.whatsapp")){
    String phoneNumber = ac.name;
}

Bien sûr, vous ne pouvez pas l'obtenir si l'utilisateur n'a pas installé WhatsApp, mais sa valeur d'essayer quand même. Et rappelez-vous, vous devriez toujours demander à l'utilisateur de confirmer.

a écrit dans mon réponse précédente

Utilisez ci-dessous le code:

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

Dans AndroidManifest.xml, donner l'autorisation suivante:

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

Mais rappelez-vous, ce code ne fonctionne pas toujours, puisque le numéro de téléphone cellulaire dépend de la carte SIM et le porte-téléphone opérateur réseau / Cell.

En outre, essayez de vérifier Téléphone -> Paramètres -> A propos -> Téléphone Identité , Si vous êtes en mesure d'afficher le numéro là, la probabilité de obtenir le numéro de téléphone du code ci-dessus est plus élevé. Si vous n'êtes pas en mesure d'afficher le numéro de téléphone dans les paramètres, vous ne serez pas en mesure d'obtenir par ce code!

Solution proposée:

  1. Obtenir le numéro de téléphone de l'utilisateur en entrée manuelle de l'utilisateur.
  2. Envoyer un code au numéro mobile de l'utilisateur par SMS.
  3. Demander à l'utilisateur d'entrer le code pour confirmer le numéro de téléphone.
  4. Enregistrer le numéro dans sharedpreference.

Faites les 4 étapes ci-dessus comme une activité de temps pendant le premier lancement de l'application. Par la suite, chaque fois que le numéro de téléphone est nécessaire, utiliser la valeur disponible de préférence partagée.

private String getMyPhoneNumber(){
    TelephonyManager mTelephonyMgr;
    mTelephonyMgr = (TelephonyManager)
        getSystemService(Context.TELEPHONY_SERVICE); 
    return mTelephonyMgr.getLine1Number();
}

private String getMy10DigitPhoneNumber(){
    String s = getMyPhoneNumber();
    return s != null && s.length() > 2 ? s.substring(2) : null;
}

http://www.androidsnippets.com/get-my- téléphone numéro

Alors voilà comment vous demandez un numéro de téléphone par le jeu des services API sans l'autorisation et hacks. Source et  ici

Il y a une nouvelle api Android qui permet à l'utilisateur de choisir leur numéro de téléphone sans avoir besoin d'une autorisation. Jeter un coup d'œil à: https://android-developers.googleblog.com/2017 /10/effective-phone-number-verification.html

// Construct a request for phone numbers and show the picker
private void requestHint() {
    HintRequest hintRequest = new HintRequest.Builder()
       .setPhoneNumberIdentifierSupported(true)
       .build();

    PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(
        apiClient, hintRequest);
    startIntentSenderForResult(intent.getIntentSender(),
        RESOLVE_HINT, null, 0, 0, 0);
} 

Je veux juste ajouter un peu ici les explications ci-dessus dans les réponses ci-dessus. Ce qui fera gagner du temps aussi pour les autres.

Dans mon cas, cette méthode n'a pas renvoyé tout numéro de téléphone mobile, une chaîne vide a été retourné. Il est dû à l'affaire que j'avais porté mon numéro sur la nouvelle carte SIM. Donc, si je vais dans les Paramètres> À propos du téléphone> État> Mon numéro de téléphone, il me montre « inconnu ».

Parfois, au-dessous du code retourne null ou chaîne vide.

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

Avec la permission ci-dessous

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

Il y a une autre façon, vous serez en mesure d'obtenir votre numéro de téléphone, je ne l'ai pas testé ce sur plusieurs appareils, mais le code ci-dessus ne fonctionne pas à chaque fois.

Essayez ci-dessous le code:

String main_data[] = {"data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"};
Object object = getContentResolver().query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"),
        main_data, "mimetype=?",
        new String[]{"vnd.android.cursor.item/phone_v2"},
        "is_primary DESC");
if (object != null) {
    do {
        if (!((Cursor) (object)).moveToNext())
            break;
        // This is the phoneNumber
        String s1 = ((Cursor) (object)).getString(4);
    } while (true);
    ((Cursor) (object)).close();
}

Vous devrez ajouter ces deux autorisations.

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

Hope this helps, Merci!

Ceci est une réponse simplifiée:

public String getMyPhoneNumber()
{
    return ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
            .getLine1Number();
}

D'abord tous les utilisateurs numéro de téléphone mobile obtenir est contre la politique éthique, plus tôt, il était possible, mais maintenant par mes recherches il n'y a pas de solution solide disponible pour cela, En utilisant un code, il est possible d'obtenir numéro de téléphone mobile, mais aucune garantie peut être il ne fonctionnera que dans quelques appareil. Après beaucoup de recherches, je trouve que trois solutions, mais ils ne travaillent pas dans tous les appareils.

Il y a la raison suivante pourquoi nous ne recevons pas.

dispositif 1.Android et nouvelle carte Sim ne pas stocker numéro de téléphone mobile si le numéro mobile n'est pas disponible dans l'appareil et la carte SIM alors comment il est possible d'obtenir le numéro, le cas échéant carte SIM ancien numéro de téléphone mobile ayant alors l'aide du gestionnaire de téléphonie, nous pouvons obtenir le nombre d'autres sages, il retournera le « nul » ou « » ou « ?????? »

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

 TelephonyManager tel= (TelephonyManager)this.getSystemService(Context.
            TELEPHONY_SERVICE);
    String PhoneNumber =  tel.getLine1Number();
  

Remarque: - Je l'ai testé cette solution suivant dispositif x Moto, Samsung Tab 4, Samsung S4, Nexus 5 et 2 redmi premier, mais il ne fonctionne pas tous les   temps retour chaîne vide si la conclusion est qu'il est inutile

  1. Cette méthode ne fonctionne que dans redmi 2 premier, mais pour ce besoin d'ajouter l'autorisation de lecture de contact dans le manifeste.
  

Remarque: - C'est pas non plus la garantie et solution efficace, je l'ai testé cette solution dans de nombreux appareil, mais cela a fonctionné seulement dans redmi 2 premier   qui est un appareil dual sim il me donne deux numéro de téléphone mobile premier est   correct, mais le second est appartient pas à mon deuxième SIM, il appartient à   mon une ancienne carte SIM que je ne suis pas en utilisant.

 String main_data[] = {"data1", "is_primary", "data3", "data2", "data1",
            "is_primary", "photo_uri", "mimetype"};
    Object object = getContentResolver().
            query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"),
            main_data, "mimetype=?",
            new String[]{"vnd.android.cursor.item/phone_v2"},
            "is_primary DESC");
    String s1="";
    if (object != null) {
        do {
            if (!((Cursor) (object)).moveToNext())
                break;
            // This is the phoneNumber
             s1 =s1+"---"+ ((Cursor) (object)).getString(4);
        } while (true);
        ((Cursor) (object)).close();
    }
  1. Dans mes recherches, je l'ai trouvé plus tôt, il était possible d'obtenir numéro de téléphone mobile en utilisant le compte WhatsApp mais maintenant une nouvelle version WhatsApp ne pas stocker numéro de téléphone mobile de l'utilisateur.
  

Conclusion : - Android n'a pas de solution garantie pour obtenir   numéro de téléphone mobile de l'utilisateur par programme.

     

Suggestion : - 1. Si vous voulez vérifier le numéro mobile de l'utilisateur, puis demander à   utilisateur de fournir son numéro, en utilisant BdP vous pouvez peut vérifier.

     
      
  1. Si vous souhaitez identifier l'appareil de l'utilisateur, pour cela, vous pouvez facilement obtenir périphérique numéro IMEI.
  2.   

TelephonyManager est pas la bonne solution, car dans certains cas, le nombre ne sont pas stockées dans la carte SIM. Je suggère que vous devez utiliser la préférence partagée pour stocker le numéro de téléphone de l'utilisateur pour la première fois l'application est ouverte et le nombre sera utilisé chaque fois que vous avez besoin.

Une petite contribution. Dans mon cas, le code a lancé une exception d'erreur. J'ai besoin mis une annotation pour le code être exécuté et résoudre ce problème. Ici, je laisse ce code.

public static String getLineNumberPhone(Context scenario) {
    TelephonyManager tMgr = (TelephonyManager) scenario.getSystemService(Context.TELEPHONY_SERVICE);
    @SuppressLint("MissingPermission") String mPhoneNumber = tMgr.getLine1Number();
    return mPhoneNumber;
}

Bien qu'il soit possible d'avoir plusieurs comptes de messagerie vocale, lorsque vous appelez à partir de votre propre numéro, la route des transporteurs vous vers la messagerie vocale. Ainsi, TelephonyManager.getVoiceMailNumber() ou TelephonyManager.getCompleteVoiceMailNumber(), en fonction de la saveur que vous avez besoin.

Hope this helps.

tout en travaillant sur une application de sécurité qui avait besoin pour obtenir le numéro de téléphone de qui si jamais mon téléphone pourrait entrer dans leurs mains, je devais le faire; 1. recevoir Boot terminé et puis essayer d'obtenir Line1_Number de telephonyManager qui retourne un résultat de chaîne. 2. comparer le résultat à cordes avec mon propre numéro de téléphone et si elles ne correspondent pas ou retourne une chaîne vide puis, 3. envoyer secrètement un SMS contenant le résultat de chaîne plus un signe spécial à mon numéro de bureau. 4. Si l'envoi du message échoue, démarrez un service et continuer à essayer après chaque heure jusqu'à ce que l'intention de SMS envoyés en attente retourne avec succès. Avec ces étapes que je pourrais obtenir le numéro de la personne qui utilise mon téléphone perdu. il n'a pas d'importance si la personne est chargée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top