Главная » Разработка для Android » Отслеживание входящих телефонных звонков

0

Одна из частых причин отслеживания состояния телефона — необходи- мость обнаружения входящих телефонных звонков и реакции на них.

Для  этого следует переопределить метод onCallStateChanged из реа- лизации  класса PhoneStateListener и зарегистрировать соответствующее событие, как показано  в листинге  12.9. После  этого вы будете получать уведомления, если состояние вызова изменится.

Листинг 12.9. Отслеживание телефонных звонков

PhoneStateListener callStateListener = new PhoneStateListener() {

public void onCallStateChanged(int state, String incomingNumber) {

// TODO реакция на входящий звонок.

}

};

telephonyManager.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);

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

TelephonyManager.CALL_STATE_IDLE — когда телефон не находит- ся в состояниях дозвона или разговора;

TelephonyManager.CALL_STATE_RINGING — когда телефон  до- званивается;

TelephonyManager.CALL_STATE_OFFHOOK — когда телефон  на- ходится в состоянии разговора.

Отслеживание изменений местоположения устройства относительно базовых станций

Вы можете получать уведомления каждый раз, когда изменяется теку- щее местоположение устройства относительно базовых станций. Для этого необходимо  переопределить метод onCellLocationChanged из реализации класса PhoneStateListener. Прежде чем зарегистрировать данную функцию, добавьте в манифест своего приложения полномочие ACCESS_COARSE_ LOCATION.

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

Обработчик onCellLocationChanged принимает  в качестве  параметра объект CellLocation, содержащий  методы, с помощью которых можно из- влечь Cell ID (getCid) и код текущей локальной зоны LAC (getLac).

В листинге 12.10 показано, как с помощью объекта PhoneStateListener отслеживать изменения местоположения устройства относительно базовых станций, отображая уведомление типа Toast, содержащее новый иденти- фикатор  Cell ID.

Листинг 12.10. Отслеживание смены базовых станций

PhoneStateListener cellLocationListener = new PhoneStateListener() {

public void onCellLocationChanged(CellLocation location) { GsmCellLocation gsmLocation = (GsmCellLocation)location; Toast.makeText(getApplicationContext(),

String.valueOf(gsmLocation.getCid()),

Toast.LENGTH_LONG).show();

}

};

telephonyManager.listen(cellLocationListener, PhoneStateListener.LISTEN_CELL_LOCATION);

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

По теме:

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