web-dev-qa-db-fra.com

Comment obtenir le numéro mobile de la carte SIM actuelle dans un appareil réel?

Je dois faire une application qui montre le numéro de contact de la carte SIM utilisée dans la cellule. Pour cela, je dois utiliser la classe TelephonyManager. Puis-je obtenir des détails sur son utilisation?

35
Narasimha

Vous pouvez utiliser le TelephonyManager pour ce faire:

TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
String number = tm.getLine1Number();

La documentation pour getLine1Number() indique que cette méthode retournera null si le nombre est "indisponible", mais elle ne dit pas quand le nombre peut être indisponible.

Vous devrez donner à votre application la permission de faire cette requête en ajoutant ce qui suit à votre manifeste:

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

(Vous ne devez pas utiliser TelephonyManager.getDefault() pour obtenir le TelephonyManager comme c'est un appel d'API privé non documenté et peut changer à l'avenir .)

64
Dave Webb

Salut En fait, c'est ma même question, mais je n'ai rien obtenu. Maintenant, j'ai obtenu le numéro de téléphone portable et son adresse e-mail d'un appareil réel Android réel (Android Mobile) .Aujourd'hui, 90% des gens en utilisant l'application App sur Android Mobile.Et maintenant, j'obtiens Mobile no et mon e-mail via cette API d'application What's.It est très simple à utiliser, voir ce code ci-dessous.

            AccountManager am = AccountManager.get(this);
            Account[] accounts = am.getAccounts();
      for (Account ac : accounts) 
       {
        acname = ac.name;

        if (acname.startsWith("91")) {
            mobile_no = acname;
        }else if(acname.endsWith("@gmail.com")||acname.endsWith("@yahoo.com")||acname.endsWith("@hotmail.com")){
            email = acname;
        }

        // Take your time to look at all available accounts
        Log.i("Accounts : ", "Accounts : " + acname);
    }

et importer cette API

    import Android.accounts.Account;
    import Android.accounts.AccountManager;
6
Amarnath Baitha

Je dois faire une application qui montre le numéro de contact de la carte SIM utilisée dans la cellule. Pour cela, je dois utiliser la classe Telephony Manager. Puis-je obtenir des détails sur son utilisation?

Oui, vous devez utiliser Telephony Manager; si vous n'avez pas trouvé le numéro de contact. de l'utilisateur; Vous pouvez obtenir le numéro de série Sim de la carte Sim et le nombre Imei de Android appareil en utilisant la même classe Telephony Manager ...

Ajouter une autorisation:

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

Importation:

import Android.telephony.TelephonyManager;

Utilisez le code ci-dessous:

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

         // get IMEI
         imei = tm.getDeviceId();

         // get SimSerialNumber
         simSerialNumber = tm.getSimSerialNumber();
3
Yasar Khan

Eh bien, tout pourrait être des hacks temporaires, mais il n'y a aucun moyen d'obtenir le numéro de mobile d'un utilisateur. C'est contraire à la politique éthique.

Par exemple, l'une des réponses ci-dessus suggère d'obtenir tous les comptes et de les extraire de là. Et ça ne marche plus! Ce ne sont que des hacks.

Le seul moyen d'obtenir le numéro de mobile de l'utilisateur passe par l'opérateur. Si vous avez un lien avec des opérateurs mobiles comme Aitel, Vodafone, etc., vous pouvez obtenir le numéro de mobile de l'utilisateur dans l'en-tête de la demande depuis le combiné mobile lorsqu'il est connecté via Internet sur le réseau mobile.

Je ne sais pas si des liens entre fabricants pour obtenir des autorisations spécifiques peuvent aider - pas exploré ce domaine, mais rien documenté au moins.

1
Amit

Parfois, vous pouvez récupérer le numéro de téléphone avec une demande USSD à votre opérateur. Par exemple, je peux obtenir mon numéro de téléphone en composant * 116 # Cela peut probablement être fait dans une application, je suppose, si la réponse USSD pourrait en quelque sorte être capturée. Bien sûr, ce n'est pas une méthode que je recommanderais d'utiliser dans une application à distribuer, le code peut même différer d'un opérateur à l'autre.

0
ziggestardust