Ответ 1
MSISDN (ака номер мобильного телефона) не является данными SIM-карты, поэтому вы не можете его получить. SIM-карта имеет идентификатор IMSI (International Mobile Subsriber Identity), который отправляется в регистр HLR (Home Location Register), отвечающий за сопоставление MSISDN/IMSI. Операторы мобильных телефонов могут хранить MSISDN на SIM-карте, если захотят, но поскольку в протоколе GSM этого не требуется, это не так.
Извините!
Подробнее об этом обсуждении Получение номера телефона также Как android получить MSISDN
EDIT:
Чтобы получить номер IMSI,
TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String imsi = mTelephonyMgr.getSubscriberId();
но несколько телефонов возвращают только 6 цифр вместо 15. Таким образом, вы можете использовать
В соответствии с этим сообщением: http://www.anddev.org/tinytut_-_getting_the_imsi_-_imei_sim-device_unique_ids-t446.html
String imei = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI);
Подробнее см. Этот вопрос и класс SystemProperties