GetLine1Number() Возвращает пустое, а не пустое

Я хочу получить Mobile Number of Device. Я использовал следующую ссылку кода Эта ссылка

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

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

ВЫХОД в Logcat:

Без SIM-карт Возврат телефонов:

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

С помощью Simcard:

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

Я также получил разрешение в <uses-permission android:name="android.permission.READ_PHONE_STATE"/> в AndroidManifest.xml

Так что я должен делать? Есть ли ошибка?

Ответ 1

Чтобы получить номер телефона с устройства, сначала вы должны установить свой собственный номер телефона на устройстве, просто:

Настройки → О телефоне → Состояние → Мой номер телефона

Телефонные номера на SIM-картах не доступны для всех операторов, например, в Индии. Сим не имеют телефонных номеров в любой памяти, поэтому мы не можем получить номер телефона из этого соединения. Однако некоторые страны и операторы имеют номера телефонов на SIM-карте, и мы можем их получить. Чтобы это работало для всех устройств, мы можем использовать две стратегии:

Чтобы избежать этой проблемы, мы можем поймать ошибку и работать соответственно. Как:

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();
}

Ответ 2

У меня есть другое решение для получения номера телефона, когда диспетчер телефонии возвращается пустым. Надеюсь, это поможет вам.

Вот мой пример кода:

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();
        }

Также не забудьте добавить эти два разрешения:

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