web-dev-qa-db-fra.com

getLine1Number () Retourne un blanc, pas null

Je veux obtenir le numéro de périphérique mobile. J'ai utilisé la référence de code suivante par Alex Volovoy'sCe lien

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

Log.d("msg", "Phone : "+mPhoneNumber);

OUTPUT dans Logcat:

Sans les cartes simcard

02-01 17:22:45.472: D/msg(29102): Phone : null

Avec Simcard:

02-01 17:22:45.472: D/msg(29102): Phone : 

J'ai également pris l'autorisation dans<uses-permission Android:name="Android.permission.READ_PHONE_STATE"/>dansAndroidManifest.xml

Donc qu'est ce que je devrais faire? Y a-t-il une erreur?

10
Pratik Butani

Pour obtenir le numéro de téléphone du périphérique, vous devez d’abord définir votre propre numéro de téléphone sur le périphérique, par l’intermédiaire de:

Paramètres -> À propos du téléphone -> État -> Mon numéro de téléphone

Les numéros de téléphone de chaque opérateur ne sont pas disponibles sur la carte SIM, comme en Inde. Les Sims n'ont pas de numéros de téléphone dans aucune mémoire. Donc, WE ne peux pas obtenir le numéro de téléphone à partir de cette connexion. Cependant, certains pays et opérateurs ont enregistré des numéros de téléphone sur la carte SIM, et nous pouvons les obtenir. Pour que cela fonctionne avec tous les appareils, nous pouvons utiliser deux stratégies:

Pour éviter ce problème, nous pouvons attraper l'erreur et travailler en conséquence. Comme:

TelephonyManager tMgr = (TelephonyManager) 
                 ShowMyLocation.this.getSystemService(Context.TELEPHONY_SERVICE);

String MyPhoneNumber = "0000000000";

try 
{
    MyPhoneNumber =tMgr.getLine1Number();
}
catch(NullPointerException ex)
{
}

if(MyPhoneNumber.equals("")){
    MyPhoneNumber = tMgr.getSubscriberId();
}
15
Ankit

J'ai une autre solution pour obtenir un numéro de téléphone lorsque le gestionnaire de téléphonie renvoie un blanc. J'espère que ça vous aidera.

Voici mon exemple de code:

public static final String main_data[] = {
            "data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"
    };


        object object = (TelephonyManager) context.getSystemService("phone");
        if (!TextUtils.isEmpty(((TelephonyManager) (object)).getLine1Number())) {

        }
        object = context.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;
                }

             if (s.equals("vnd.Android.cursor.item/phone_v2")) {
                    String s1 = ((Cursor) (object)).getString(4);
                    boolean flag1;
                    if (((Cursor) (object)).getInt(5) > 0) {
                        flag1 = true;
                    } else {
                        flag1 = false;
                    }
                    Toast.makeText(SampleActivity.this, "Phone:-" + s1, Toast.LENGTH_LONG).show();
                }
            } while (true);
            ((Cursor) (object)).close();
        }

N'oubliez pas non plus d'ajouter ces deux autorisations:

<uses-permission Android:name="Android.permission.READ_CONTACTS" />
<uses-permission Android:name="Android.permission.READ_PROFILE" />
0
Hardik Mehta