web-dev-qa-db-fra.com

Comment obtenir le numéro de téléphone d'un appareil par programme

J'essaie d'obtenir le téléphone sans utiliser la méthode suivante:

private String getMyPhoneNumber() {
    TelephonyManager mTelephonyMgr;

    mTelephonyMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
    //String imsi = mTelephonyMgr.getSubscriberId();
    String phnNo = mTelephonyMgr.getLine1Number();
    if (phnNo == null) {
        phnNo = getNoFromWatsApp();
    }
    return phnNo;
}

private String getNoFromWatsApp(){
    AccountManager am = AccountManager.get(this);
    Account[] accounts = am.getAccounts();
    String phoneNumber = "";

    for (Account ac : accounts) {
        String acname = ac.name;
        String actype = ac.type;
        // Take your time to look at all available accounts
        if(actype.equals("com.whatsapp")) {
            phoneNumber = ac.name;
        }
    }
    return phoneNumber;
}

Mais chaque fois que je reçois un numéro de téléphone vide. J'ai même essayé d'obtenir le numéro de téléphone de WhatsApp, mais il renvoie "WhatsApp" au lieu du numéro de téléphone. Existe-t-il un autre moyen de résoudre ce problème?

25
Android Priya

Utilisez le code ci-dessous:

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

Dans AndroidManifest.xml, accordez l'autorisation suivante:

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

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

Essayez également de vous enregistrer Téléphone -> Paramètres -> À propos -> Identité du téléphone , si vous pouvez afficher le numéro là-bas, la probabilité d'obtenir le numéro de téléphone à partir du code ci-dessus est plus élevée. Si vous ne pouvez pas voir le numéro de téléphone dans les paramètres, vous ne pourrez pas obtenir via ce code!

37