Зчитування даних з sim-карти

Якщо пристрій, на якому працює ваш додаток, має під- Держко GSM, воно повинно мати SIM-карту. Дані, які ви може- ті витягти з неї за допомогою об'єкта TelephonyManager, - код країни в форматі ISO, назва оператора, коди MCC (мобільний код країни) і MNC (код мобільної мережі). Ця інформація стане в нагоді, якщо потребу- ється надати особливі можливості конкретного оператора.

Ви також можете дізнатися серійний номер поточної SIM-карти, якщо додасте в маніфест свого застосування повноваження READ_PHONE_ STATE.

Перш ніж почати працювати з даними методами, необхідно убедіть- ся, що SIM-карта в стані готовності. Дізнатися це можна за допомогою методу getSimState, як показано в лістингу 12.6.

int simState = telephonyManager.getSimState ();

case (TelephonyManager.SIM_STATE_ABSENT): break;

case (TelephonyManager.SIM_STATE_NETWORK_LOCKED): break; case (TelephonyManager.SIM_STATE_PIN_REQUIRED): break; case (TelephonyManager.SIM_STATE_PUK_REQUIRED): break; case (TelephonyManager.SIM_STATE_UNKNOWN): break;

// Вийміть з SIM-карти код країни в форматі ISO

String simCountry = telephonyManager.getSimCountryIso ();

// Отримайте код оператора активної SIM-карти (MCC + MNC) String simOperatorCode = telephonyManager.getSimOperator ();

// Вийміть з SIM-карти назва оператора

String simOperatorName = telephonyManager.getSimOperatorName ();

// - Потрібна наявність повноваження READ_PHONE_STATE -

// Отримайте серійний номер SIM-карти

String simSerial = telephonyManager.getSimSerialNumber ();

в стані підключення до мережі,

Лістинг 12.7. Каркас реалізації PhoneStateListener

PhoneStateListener phoneStateListener = new PhoneStateListener ()

public void onCallForwardingIndicatorChanged (boolean cfi) <>

public void onCallStateChanged (int state, String incomingNumber) <>

public void onCellLocationChanged (CellLocation location) <>

public void onDataActivity (int direction) <>

public void onDataConnectionStateChanged (int state) <>

public void onMessageWaitingIndicatorChanged (boolean mwi) <> public void onServiceStateChanged (ServiceState serviceState) <> public void onSignalStrengthChanged (int asu) <>

Створивши власний об'єкт класу PhoneStateListener, зареєструйте його за допомогою TelephonyManager, використовуючи бітову маску для визначення подій, які ви хочете відслідковувати, як показано в лістингу 12.8.

Лістинг 12.8. Реєстрація PhoneStateListener

PhoneStateListener.LISTEN_CALL_STATE | PhoneStateListener.LISTEN_CELL_LOCATION | PhoneStateListener.LISTEN_DATA_ACTIVITY | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE | PhoneStateListener.LISTEN_MESSAGE_WAITING_

Щоб скасувати реєстрацію, викличте метод listen, передавши йому бі- товое поле PhoneStateListener.LISTEN_NONE як параметр, як показано нижче: