Главная » Разработка для Android » Считывание данных с SIM-карты

0

Если устройство, на котором работает ваше приложение, обладает под- держкой  GSM, оно должно  иметь SIM-карту. Данные, которые вы може- те извлечь  из нее с помощью  объекта  TelephonyManager, — код страны в формате  ISO, название  оператора, коды MCC  (мобильный код страны) и MNC (код мобильной сети). Эта информация пригодится, если потребу- ется предоставить  особые возможности конкретному оператору.

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

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

Листинг 12.6.

int simState = telephonyManager.getSimState();

switch (simState) {

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;

case (TelephonyManager.SIM_STATE_READY): {

// Извлеките из 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();

break;

}

default: break;

}

Отслеживание изменений

в состоянии подключения к сети,

статусе телефона и телефонной активности

API в Android, отвечающий  за телефонию, позволяет  следить за состо- янием телефона, получать телефонные номера, из которых идут входящие звонки,  наблюдать  за изменениями уровня  сигнала,  статуса сетевого со- единения  и передачей данных.

Чтобы отслеживать и контролировать состояние телефона, манифест ва- шего приложения должен содержать полномочие READ_PHONE_STATE, как показано в следующем фрагменте  кода:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

Путем наследования класса PhoneStateListener вы можете отслеживать изменения состояния телефона (и реагировать на них), включая такие пока- затели, как статус вызова («звонок», «трубка снята» и т. д.), местоположение относительно базовых станций, статус голосовой  почты и переадресации вызовов, телефонные услуги и уровень сотового сигнала.

Чтобы реагировать на события, возникающие при изменении состояния телефона,  создайте новую реализацию класса PhoneStateListener и пере- определите обработчики тех событий, которые вас интересуют. Каждый обработчик принимает параметры, описывающие новое состояние телефона (например, местоположение относительно базовых станций, состояние со- тового соединения  или уровень сигнала).

В листинге 12.7 показан каркас реализации класса PhoneStateListener, в котором перечислены  доступные  обработчики  для отслеживания изме- нений состояния телефона.

Листинг 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

telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_FORWARDING_

INDICATOR |

INDICATOR |

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

PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_SIGNAL_STRENGTH);

Чтобы отменить регистрацию, вызовите метод listen, передав ему би- товое поле PhoneStateListener.LISTEN_NONE в качестве  параметра,  как показано ниже:

telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

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