Рис. 10.7. Прием SMS-сообщения
Прием и обработка SMS-сообщений
Итак, мы научились отправлять SMS-сообщения из своей программы. Но было бы неплохо научить приложения принимать подобные сообщения. Для приема сообщений существует пространство имен MessageInterception
, которое находится в сборке Microsoft.WindowsMobilе.PocketOutlook
.
Следует заметить: можно организовать прием сообщений таким образом, что запущенное приложение будет перехватывать нужные сообщения, содержащие ключевые слова. Причем система даже не покажет окно, уведомляющее о прибытии перехваченного события.
С этой возможностью стоит познакомиться ближе. После создания нового проекта InterceptionSMS_CS
, нужно добавить на форму кнопку для отсылки SMS-сообщения, флажок chkAlert
для установки флага срочности и текстовое поле, в котором будет содержаться текст SMS-сообщения. Затем надо задать ссылки на уже применявшиеся ранее сборки Microsoft.WindowsMobile
и Microsoft.WindowsMobile.PocketOutlook
. Код, отвечающий за обработку принятых сообщений, приведен в листинге 10.11
using Microsoft.WindowsMobile;
using Microsoft.WindowsMobile.PocketOutlook;
using Microsoft.WindowsMobile.PocketOutlook.MessageInterception;
// Объявляем переменную
private MessageInterceptor smsInterceptor;
private void smsInterceptor_MessageReceived(object sender,
MessageInterceptorEventArgs e) {
// Обработка входящего сообщения
MessageBox.Show("К вам пришло срочное сообщение");
}
private void butSendSMS_Click(object sender, EventArgs e) {
SmsMessage message = new SmsMessage();
// Номер получателя
message.To.Add(new Recipient("4250010001"));
// Текст сообщения
if (chkAlert.Checked) {
// Если взведен флажок, то добавляем слово Срочно!
message.Body = "Срочно! " + txtSMSText.Text;
} else {
message.Body = txtSMSText.Text;
}
// Посылаем сообщение
message. Send();
}
private void Form1_Load(object sender, EventArgs e) {
smsInterceptor =
new MessageInterceptor(InterceptionAction.NotifyAndDelete, true);
smsInterceptor.MessageCondition =
new MessageCondition(MessageProperty.Body,
MessagePropertyComparisonType.StartsWith, "Срочно", true);
smsInterceptor.MessageReceived +=
new MessageInterceptorEventHandler(smsInterceptorMessageReceived);
}
При помощи ключевого слова using
было объявлено несколько пространств имен, также была добавлена переменная smsInterceptor
, после чего можно было объявлять функцию обработки сообщения smsInterceptor_MessageReceived
. При получении SMS-сообщения с определенным текстом эта функция выводит соответствующую строку.
Но самое интересное происходит в событии Form_Load
. Как только устройство принимает SMS-сообщение, оно перехватывается приложением для дальнейшей обработки. Если сообщение начинается словом «Срочно», то пользователь предупреждается о прибытии важного сообщения, после чего это сообщение удаляется. Подобное поведение обеспечивает параметр NotifyAndDelete
.
После запуска приложения на форме будут отображены текстовое поле и флажок. После ввода текста сообщения нужно нажать кнопку Послать SMS
. Код отправки сообщения позаимствован из предыдущего примера. Система должна отреагировать на прибытие нового сообщения с помощью специального уведомления, которое мы видели при разборе предыдущего примера (см. рис. 10.7).