Android, как взять номер телефона?

#android #phone-number

#Android #номер телефона

Вопрос:

В моем приложении я написал следующий код, чтобы извлечь номер телефона. Когда я запускаю его в эмуляторе, все в порядке, но когда я запускаю его на реальном устройстве, приложение вылетает. каково ваше предложение? Я добавил <uses-permission android:name="android.permission.READ_PHONE_STATE"/> в файл манифеста.

 public class TestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
TextView phoneNumber = (TextView)findViewById(R.id.tvPhoneNumber);
phoneNumber.setText(getMy10DigitPhoneNumber());
}
private String getMyPhoneNumber(){
        TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
        return mTelephonyMgr.getLine1Number();
    }

    private String getMy10DigitPhoneNumber(){
        String s = getMyPhoneNumber();
        return s.substring(2);
    }

}
  

Комментарии:

1. Когда я это делал, цифры отличались между эмулятором и реальным устройством. Подумайте об удалении подстроки и посмотрите, что вы получите.

2. «Приложение вылетает» — но вы не думаете, что сообщение об ошибке или трассировку стека было бы полезно опубликовать? 🙂

3. да, вы правы, извините, я забыл это:(

Ответ №1:

getLine1Number() вернет строку номера телефона, если доступно, и null, если недоступно. Итак, вы должны проверить наличие нулевого указателя.

 private String getMy10DigitPhoneNumber() {
        String s = getMyPhoneNumber();
        if(s == null) return "";
        else return s.substring(2);
}
  

Также проверьте длину строки, возвращаемой getLine1Number() . В моем телефоне я получил "" строку. В этом случае substring() произойдет выброс IndexOutOfBoundsException . Поэтому проверьте длину s также перед вызовом substring().

Комментарии:

1. ты великий человек. проблема была из-за длины строки. Я удалил подстроку claus, и она работала нормально 🙂 но я не брал номер телефона, просто «». 🙁

2. @Hesam, спасибо. Кстати, вы можете проверить Настройки -> О телефоне -> Статус -> Мой номер телефона на своем мобильном телефоне. Этот номер возвращается getLine1Number() . Если он неизвестен , то getLint1Number() вернет значение null или «». Похоже, это зависит от оператора / SIM-карты.