3PPC.net
Старый 21.05.2008, 13:41 #1
Аватар для Archibald
Archibald Archibald вне форума
Трудяга
 
Регистрация: 01.12.2007
Адрес: Интернет
Сообщений: 353
Репутация: 90
Archibald Archibald вне форума
Трудяга
Аватар для Archibald
 
Регистрация: 01.12.2007
Адрес: Интернет
Сообщений: 353
Репутация: 90
Устройство: Нет
ПРОГРАММИРОВАНИЕ ДЛЯ СМАРТФОНОВ НА SYMBIAN OS

ПРОГРАММИРОВАНИЕ ДЛЯ СМАРТФОНОВ НА SYMBIAN OS



Для начала определись, для какого именно Symbian смартфона ты хочешь программировать. Существует несколько базовых платформ, на основе которых делаются различные модели телефонов. Платформы смартфонов на Symbian OS

Для начала определись, для какого именно Symbian смартфона ты хочешь программировать. Существует несколько базовых платформ, на основе которых делаются различные модели телефонов. Платформы смартфонов на Symbian OS
Series 60 1.2: Nokia N-Gage, 3650, 3660, 7650, Siemens SX1,
Sendo X.
Series 60 2.0: Nokia 6600.
Series 60 2.1: Nokia 6620, 7610.
Series 80 1.0: Nokia 9210, 9210i.
Series 80 2.0: Nokia 9500.
Series 90 1.0: Nokia 7700 (медиафон).
UIQ 2.0: SonyEricsson P800
UIQ 2.1: SonyEricsson P900, Motorola A925.
После свершения этого трудного выбора нужно скачать SDK. Разработчик Series - Nokia, UIQ - SonyEricsson. Соответственно, иди на
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
или
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
(раздел Symbian OS), зарегистрируйся как разработчик и скачивай необходимый SDK. На Series 60 лично я рекомендую программировать для версии платформы 1.2, тогда твое изделие будет работать и на обновленной платформе. SonyEricsson же рекомендует и для UIQ 2.0, и для 2.1 использовать один SDK версии 2.1. У Siemens, Sendo и Motorola есть свои SDK, с помощью которых можно реализовывать дополнительные возможности этих телефонов, но в этом случае твоя программа не сможет работать на других смартфонах той же платформы. Так что лучше не пользуйся ими без необходимости. Кроме того, SDK бывают для различных систем разработки: WINSCW - для CodeWarrior Development Studio, WINS - основной, его можно использовать вместе с Visual Studio и из командной строки (также есть версии с поддержкой среды Borland C++ BuilderX Mobile Edition). Выбирай версию с поддержкой Visual Studio. Размер SDK будет в 80-240 Мб, что есть нехило. Одно время Nokia рассылала старые версии SDK на компакт-дисках, но сейчас этим не занимается. Для работы SDK необходим ActivePerl 5.18 или выше, он может идти в архиве с SDK, если же его не было - скачай его с
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
[/HIDE]. Везде в требованиях будет указано, что еще необходима Java2 RunTime 1.3.1, но, вообще-то, можно и без нее. Распакуй архив с SDK и установи его. Обязательно устанавливай на тот же диск, где будут лежать исходные тексты твоих проектов, иначе возможны различные глюки (самый простой - ничего не будет компилироваться). ДОКУМЕНТАЦИЯ И ПРИМЕРЫ ПРОГРАММ В SDK входит много документации по Symbian OS и конкретной платформе. Конечно, с MSDN ее не сравнить, но пользоваться ею можно. Для SDK Series 60 1.2 ищи здесь:
Start -> Programs -> Symbian 6.1 SDKs -> Series 60 -> Documentation, а для UIQ2.1 - здесь:
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
, либо скачай апдейт к SDK от 15 июня, где появилась документация в CHM-формате. Также есть несколько примеров готовых программ. Рассмотрим на примере Series 60 SDK 1.2. Двигай сюда:
Symbian6.1Series60Series60Ex. Войди в пример HelloWorld. Программа поделена на каталоги group (здесь лежат файлы проекта bld.inf и helloworld.mmp, а также файл ресурсов helloworld.rss), inc (подключаемые файлы заголовков), sis (здесь helloworld.pkg - для создания готового пакета с программой helloworld.sis) и src (сами исходные тексты программы). В больших программах файлы с ресурсами обычно помещают в каталог data, а также добавляют каталог aif с информацией о программе и иконками. Для компилирования примера надо войти в каталог с файлом bld.inf и из командной строки вдолбить следующие команды:
bldmake bldfiles
Пути в Path должны были прописаться при установке, после выполнения в этом каталоге появится файл abld.bat.abld build wins udeb
Происходит компиляция программы. epoc Запускается эмулятор. Обычный экран телефона - как всегда, новое приложение ты можешь увидеть самым последним пунктом в меню. Если же ты хочешь сделать приложение для телефона, то вместо второй команды делай так:
abld build thumb urel
Затем переходи в каталог с .pkg-файлом, и выполняй (с правильным именем файла, конечно):
makesis helloworld.pkg
Появится файл helloworld.sis, который можно переслать на телефон и свободно установить.

ДОБАВЛЯЕМ "ЧЕРНЫЙ СПИСОК" SMS
За основу возьмем HelloWorld и начнем изменять его. На сайте Nokia есть несколько дополнительных примеров, которые не входят в SDK. Посмотри их:
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
-> Resources -> Technologies -> Symbian -> Code and Examples. Здесь, кроме всего прочего, ты обнаружишь SMS Sending Example v1.4 для Nokia Series 80 1.0 (9200). Скачай его, изучи врезку "Пример кода" и проверь себя по врезке "Особенности примера SMS".
В SMS Sending выполняются все необходимые действия: распознается SMS’ка, и если она ненужная, то никакого звука или уведомления на экран не выдается - сообщение считается уже прочитанным. Его можно удалить, используя функцию DeleteMessagesFromInboxL. SMS’ка проверяется на соответствие функции MessageReceivedL по первым 4-м символам в теле письма. Чтобы прога проверяла не символы, а обратный адрес, поменяем функцию на CBaseMtm::AddresseeList(). Исправленная часть MessageReceivedL_LIT(KOurNum,"Max (+79001234567)"); // проверяемый номер for(int i=0;i<(smsMtm->AddresseeList()).Count();
i++)
if ((smsMtm->AddresseeList())[i]==KOurNum) // сообщение нам
{
// обрабатываем сообщение, да, оно наше
returnVal = ETrue;
break;
}
Обрати внимание, что это массив адресов. В качестве обратного адреса используется не только номер телефона - сервер сообщений использует все данные, доступные ему, например, из адресной книги. Но ты можешь выявлять в строке настоящий номер и проверять только его. Теперь нам надо, используя полученные знания, добавить к HelloWorld "черный список". Дополняем файл MMP нужными библиотеками, добавляем необходимые #include. Теперь создаем отдельный класс CSmsReceiveHandler, в который переносим всю обработку SMS как клиента сервера сообщений. В AppUi классе допишем CMsvHandler* iReceiveHandler, а также дополнительно наследуем его от MMsvObserver. Для подробного изучения изменения классов смотри исходный текст готовой программы. Если хочешь, можно просто перенести нужные части к CHelloWorldAppUi, но если программа будет расти, это будет мешать. Добавляем в HelloWorldAppUi.cpp в реализацию ConstructL() создание нашего обработчика входящих SMS’ок. Сразу после BaseConstructL() пишем:
iReceiveHandler = CSmsReceiveHandler::NewL(*this); а в деструктор ~ChelloWorldAppUi() добавляем удаление: delete iReceiveHandler; iReceiveHandler = NULL;
Все, программа готова. Откомпилируй ее, создай SIS-файл, установи на телефон и убедись, что уведомления о приходе SMS подавляются (для проверки можешь занести в "черный список" всю телефонную книгу).
РАЗВИТИЕ
Написать "черный список" для входящих звонков также не очень сложно, просто поищи в документации к RTelServer, RPhone, RLine, RCall инфу про incoming call (входящий звонок). Также можно добавить редактирование номеров в "черном списке" пользователем (смотри пример SettingList для создания диалогов-установок, а также документацию по использованию CDictionaryFileStore - для сохранения установок в ini-файл программы). Вот, собственно, и все, что я тебе хотел сообщить на сегодняшний день. Дорога в жизнь и пути поиска информации теперь есть, готовься стать могучим девелопером мобильных приложений, тем более что это нынче модно .

UID - УНИКАЛЬНЫЙ ИДЕНТИ-ФИКАТОР
UID - это глобальный универсальный идентификатор, представляющий собой 32-х битное число. UID прописывается вторым параметром в файле проекта MMP (первый менять не надо, это 0x100039CE - идентификатор GUI-приложения), AIF-файле (параметр app_uid), а также должен возвращаться функцией AppDllUid в основном классе твоей программы. Во всех этих местах UID должен быть одинаковым. В Symbian OS у любой программы или DLL есть UID, по которому однозначно можно ее узнать, никакая другая программа не должна иметь такой же UID. Если ты кодишь только для себя и друзей, используй любой случайный, но вот программа, которая будет выпущена в люди, должна иметь UID, полученный в Symbian.
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
- здесь ты можешь прочитать о том, как получить UID. Если читать лень, просто напиши письмо на английском языке на адрес
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
с темой письма "UID Request" и следующим текстом:
Please send me 10 UIDs.
Author name: [настоящее имя]
EMail: [емайл]
Можно запросить максимум 10 UIDов, можно и всего один - смотри сам, сколько тебе необходимо. Если что, можно запросить еще. Высылаются они быстро, в течение пары суток.
ОСОБЕННОСТИ ПРИМЕРА SMS
Рассмотрим основные отличия Nokia SMS Example от элементарного HelloWorld. В файл .MMP добавлены следующие биб- лиотеки:
LIBRARY msgs.lib // для MmsvSessionObserver
LIBRARY muiu.lib // для CommandAbsorbingControl
LIBRARY smcm.lib // для TSmsMtmCommand
LIBRARY gsmu.lib // для Service Center address
А в списке подключаемых заголовков (оставлены только нужные нам):
#include // для MMsvSessionObserver
#include
#include
#include
Класс AppUi приложения, кроме CEikAppUi, также наследует от MMsvSessionObserver. И появляются следующие члены класса:
TMsvId iMsvId; // идентификатор сервера сообщений
CMsvSession* iSession; // клиентская сессия к серверу сообщений
CBaseMtm* iMtm; // Message Type Module (sms)
CClientMtmRegistry* iMtmReg; // Mtm registry клиент для создания
новых SMS’ок - это не нужно
В ConstructL() создается сессия с сервером сообщений iSession =
CMsvSession::OpenAsyncL(*this); мы берем на себя HandleSessionEventL
(TMsvSessionEvent aEvent, TAny* aArg1, TAny*
aArg2, TAny* /*aArg3*/) - здесь и происходит
начальная обработка. Так, после соединения
с сервером вызывается
CompleteConstructL(), где мы можем производить дополнительную инициализацию. В случае получения новой sms’ки мы делаем ее невидимой (чтобы пользователь или другая программа не успели обратить на нее внимание), проверяем ее на то, пришло нам уведомление или нет (MessageReceivedL (entries->At(i))), а затем либо помечаем как прочитанную, либо восстанавливаем ее видимость для других приложений. Затем все изменения подтверждаются (entry->ChangeL(msvEntry)), и sms-сервер по-настоящему изменяет ее.
ПРИМЕР КОДА
Основные функции:
В конструкторе инициализируем CActive(EPriority
Standard) и делаем CActiveScheduler::Add(this) (фактически это multithreads).
В деструкторе выключаемся из обработки ActiveSheduler
iOperation->Cancel().
Во второй части двухфазного создания объекта создаем сессию с сервером сообщений смартфона. Он будет отвечать сообщениями MMsvSessionObserver::HandleSessionEventL.В ConstructL() CSmsReceive Handler открываем iSession=CMsvSession::OpenAsyncL(*this).
В HandleSessionEventL проверяем полученное событие TMsvSessionEvent aEvent, и если новое сообщение появилось (EMsvEntriesChanged):TMsvId* entryId=static_cast(aArg2);
// берем только те, что появились в Inbox
if (*entryId==KMsvGlobalInBoxIndexEntryId)
{
// Выделяем появившиеся сообщения
CMsvEntrySelection*
entries=static_cast(aArg1);
// Для каждого запускаем проверку/обработку
for(TInt i=0;iCount();i++)
MessageReceivedL(entries->At(i));
}
В обработке MessageReceivedL(TMsvId aEntryId)
// Загружаем сообщение
SetMtmEntryL(aEntryId);
iMtm->LoadMessageL();
TMsvEntry msvEntry=iMtm->Entry().Entry();
TUid type=iMtm->Type();
// Проверяем тело и тип сообщения
CRichText& body=iMtm->Body();
TPtrC text(body.Read(0,KSmsMessagePrefix.iTypeLength));
if
(type==KUidMsgTypeSMS&&text.Compare(KSmsMessagePrefix)==0) // точно нам
{
// Делаем с ним что-нибудь, например, берем в text весь текст сообщения
// Удаляем сообщение - чтобы остановить сигнал о нем
DeleteEntryL(msvEntry);
iPhase = EWaitingForDeleted;
// Теперь данные, полученные из сообщения, можно использовать
iObserver.HandleReceivedMessage(text);
}
__________________
Apple: Iphone 4
КПК: Qtek S200
SmartPhone: Nokia n73me
Телефон: Motorolla e398
PSP: Fat 6.35 PRO A4
Archibald вне форума   Ответить с цитированием Цитировать выделенное
Старый 17.05.2009, 22:53 #2
viktorial viktorial вне форума
Новичок
 
Регистрация: 26.04.2009
Сообщений: 1
Репутация: 0
viktorial viktorial вне форума
Новичок
 
Регистрация: 26.04.2009
Сообщений: 1
Репутация: 0
Устройство: T-Mobile MDA Vario
Mne nado soobschenie.
M Первое предупреждение

Последний раз редактировалось psix1488; 30.01.2010 в 13:02.
viktorial вне форума   Ответить с цитированием Цитировать выделенное
Старый 30.01.2010, 12:08 #3
Master_sky Master_sky вне форума
Новичок
 
Регистрация: 30.01.2010
Сообщений: 1
Репутация: 0
Master_sky Master_sky вне форума
Новичок
 
Регистрация: 30.01.2010
Сообщений: 1
Репутация: 0
Устройство: Sony Ericsson P910i
Идея Дык)

А пример какого-нибуть плеера?
Master_sky вне форума   Ответить с цитированием Цитировать выделенное
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование feyk Компьютеры и интернет 31 07.02.2012 00:33
Symbian OS 9.5 – новый виток эволюции смартфонов Tiburo Новости мира Windows Mobile 0 09.11.2008 22:49
Все лучшее для смартфонов Symbian + модели 2008 года (БУКА/2008) psix1488 База знаний (FAQ) 0 17.09.2008 23:05
Программирование на ассемблере Loginanton Программирование под Windows Mobile 3 24.07.2008 09:49
Правила раздела "Программирование" tz-lom Программирование под Windows Mobile 0 24.10.2007 10:54

 


Текущее время: 15:50. Часовой пояс GMT +3.


Powered by vBulletin®
Copyright ©2000 - 2017, vBulletin Solutions, Inc.