Якщо пристрій, на якому працює ваш додаток, має під- Держко 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 як параметр, як показано нижче: