web-dev-qa-db-fra.com

Comment obtenir le numéro de carte SIM actuel sous Android?

Je veux connaître le numéro de l'utilisateur mobile sous Android. J'ai utilisé ce code mais je ne reçois pas de numéro.

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
        String n = tm.getLine1Number();

Autorisation:

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

Est-il obligatoire de sauvegarder le numéro dans Android mobile settings --> about phone --> status --> myphone number

Une idée sur ça?

38
User

Je pense que le numéro de série et le numéro de sim sont uniques. Vous pouvez essayer ceci pour obtenir le numéro de série sim et obtenir le numéro sim et n'oubliez pas d'ajouter l'autorisation dans le fichier manifeste.

TelephonyManager telemamanger = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String getSimSerialNumber = telemamanger.getSimSerialNumber();
String getSimNumber = telemamanger.getLine1Number();

Et ajoutez la permission ci-dessous dans votre Androidmanifest.xml fichier.

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

Faites-moi savoir s'il y a un problème.

27
Dipak Keshariya

Obtenir le numéro de téléphone, l'IMEI et l'ID de la carte SIM

TelephonyManager tm = (TelephonyManager) 
            getSystemService(Context.TELEPHONY_SERVICE);        

Pour la carte SIM, utilisez la méthode getSimSerialNumber ().

    //---get the SIM card ID---
    String simID = tm.getSimSerialNumber();
    if (simID != null)
        Toast.makeText(this, "SIM card ID: " + simID, 
        Toast.LENGTH_LONG).show();

Numéro de téléphone de votre téléphone, utilisez getLine1Number () (certains appareils ne renvoient pas le numéro de téléphone)

    //---get the phone number---
    String telNumber = tm.getLine1Number();
    if (telNumber != null)        
        Toast.makeText(this, "Phone number: " + telNumber, 
        Toast.LENGTH_LONG).show();

Numéro IMEI du téléphone, utilisez la méthode getDeviceId ()

    //---get the IMEI number---
    String IMEI = tm.getDeviceId();
    if (IMEI != null)        
        Toast.makeText(this, "IMEI number: " + IMEI, 
        Toast.LENGTH_LONG).show();

Autorisations nécessaires

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

Mise à jour: cette réponse n'est plus disponible car Whatsapp avait cessé d'exposer le numéro de téléphone en tant que nom de compte, veuillez ignorer cette réponse.

=============================================== ===============================

Cela fait presque 6 mois et je pense que je devrais mettre à jour cette solution avec une solution alternative que vous voudrez peut-être envisager.

À compter d'aujourd'hui, vous pouvez vous fier à une autre application volumineuse, Whatsapp, à l'aide de 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 l’essayer.

Autorisation:

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

Code:

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

ArrayList<String> googleAccounts = new ArrayList<String>();
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érifier l'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 cela vaut la peine d'essayer de toute façon. Et rappelez-vous que vous devriez toujours demander à l'utilisateur une confirmation.

6
Chor Wai Chun

Vous avez tout à fait raison, mais le problème est avec getLine1Number() function.

getLine1Number () - cette méthode renvoie la chaîne de numéro de téléphone pour la ligne 1, c'est-à-dire le numéro MSISDN d'un téléphone GSM. Retourne la valeur null si elle n'est pas disponible.

cette méthode ne fonctionne que pour quelques téléphones portables, mais pas pour tous les téléphones.

Donc, si vous devez effectuer des opérations en fonction de la carte SIM (autre que l'appel), vous devez alors utiliser getSimSerialNumber(). C'est toujours nique, valide et toujours existe.

2
Sahil Mahajan Mj