номер телефона андроида

Я хочу отображать свой номер телефона при открытии приложения, но получаю исключение:

Приложение «Телефон» () неожиданно остановилось. Пожалуйста, попробуйте еще раз.

Я уже добавил разрешение Read_Phone_State в файл манифеста.

public class Telephone extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        View v = new View(this);
        v.setTag("The Number is : " + getMyTenDigitsNumber());
        setContentView(v);

    }

    private String getTelephone() {
        TelephonyManager tm;
        tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        return tm.getLine1Number();

    }

    private String getMyTenDigitsNumber() {
        String s = getTelephone();
        return s.substring(3);
    }
}

person Mischaila    schedule 28.11.2011    source источник
comment
Что в журнале? Пожалуйста, разместите соответствующие записи logcat   -  person Aleks G    schedule 28.11.2011
comment
Я изменил getLine1Number() на getDeviceSoftwareVersion(), но приложение по-прежнему принудительно закрывается. rel="nofollow noreferrer">ссылка   -  person Mischaila    schedule 28.11.2011


Ответы (2)


Вполне вероятно, что getLine1Number возвращает null, поэтому ваша последующая операция с подстрокой выдает NullPointerException (вы должны быть в состоянии проверить с помощью logcat). Согласно документации для этого метода, может вернуть ноль, если номер недоступен. Возможно, ваш провайдер не хранит номер телефона на SIM-карте, поэтому в этом случае номер может быть недоступен для этого метода.

person Chris    schedule 28.11.2011
comment
Я тестирую его на своем личном телефонном устройстве, и logcat сообщает мне, что это nullPointException, но как я могу заставить своего провайдера показывать это? - person Mischaila; 28.11.2011
comment
Если поставщик не возвращает его, нет никакого способа заставить его. Даже если это работало на вашем телефоне, нет гарантии, что оно будет работать на телефонах других поставщиков. Если вы используете номер телефона для уникальной идентификации телефона, вам лучше использовать getDeviceId() - person Chris; 28.11.2011

Возможно, что getLine1Number() возвращает null, и поэтому ваша операция с подстрокой выдает NPE. getLine1Number() возвращает значение null, когда номер недоступен, например, если SIM-карта не вставлена ​​или номер не сохранен на SIM-карте. Вы можете проверить, доступен ли номер, перейдя в «Настройки» -> «О телефоне» -> «Статус» и проверив, отображается ли ваш номер в поле «Мой номер телефона».

person Raghav Sood    schedule 28.11.2011
comment
Спасибо Raghav Sood, было написано, что номер неизвестен :) - person Mischaila; 28.11.2011