Разработка приложений для мобильных устройств на платформе Windows Mobile

Обзор мобильных элементов управления MS Visual Studio 2008. Мобильные веб - страницы. Работа с эмулятором мобильных устройств

Показывать лекцию целиком

Целью данной лабораторной работы является знакомство с мобильными элементами управления и их возможностями.

Задание на лабораторную работу

  • Выбрать предметную область, проблему, для решения которой необходимо создание мобильного IT - решения. Разработка примерной архитектуры приложения. (2 часа)
  • Рассмотреть имеющиеся элементы управления, возможности их применения, методы, события. (2 часа)
  • Создать мобильную форму с простейшим кодом (лучше всего для данных целей выбрать задачу, связанную с установлением соединения с БД, редактирования записей, вывод результатов простейших запросов, авторизацию и т.п. )(2 часа)
  • Важно понимать, что конечной целью данной лабораторной работы не является создание законченного IT - решения на базе мобильных устройств. Основная задача - ознакомительная, перед началом проектировки непосредственно решения и написания ТЗ, важно понимать, что можно сделать средствами разработки.

    6.1. Эмулятор мобильных устройств

    Как и Visual Studio 2005, версия Visual Studio 2008 Professional пригодна для проектирования приложений для мобильных устройств с использованием компонента SmartDevice Projects (функции разработки для мобильных устройств в Visual Studio 2008 Standard Edition отсутствуют). В новом эмуляторе устройств Visual Studio 2008 появилось несколько улучшений. Можно проектировать программы для Pocket PC 2003, Smartphone 2003 и Windows Mobile 5.0. Благодаря эмуляции батарей, эмулятор устройств может выдать событие низкого заряда батарей. Таким образом, мобильные приложения могут проверять заряд батарей.

    (рис 6.1) Эмулятор мобильных устройств Visual Studio 2008

    В состав Visual Studio 2008 входит новейшая версия платформ разработки устройств Microsoft:.NET Compact Framework 3.5. Можно задействовать различные версии.NET Compact Framework. Таким образом, при создании нового проекта SmartDevice можно выбрать в качестве целевой платформы .NET Compact Framework 2.0 или .NET Compact Framework 3.5.

    Кроме того, Visual Studio 2008 предоставляет новые службы Sync Services for ADO. NET, через которые новые мобильные приложения обеспечивают конечным пользователям одинаково удобную работу как с подключенным, так и с отключенным от сети устройством. Мобильное устройство с локальным хранилищем SQL Server Compact и службами Sync Services может периодически подключаться к серверу базы данных и выполнять двунаправленную синхронизацию с мобильным приложением.

    6.2. Краткий обзор мобильных элементов управления

    Списочные элементы управления

    Списочный элемент управления направляет на устройство последовательность элементов. Он может работать в статическом или интерактивном режиме. В статическом режиме данный элемент генерирует статический список чисто текстовых элементов. В интерактивном режиме получаются элементы, по щелчку на которых генерируются события.

    Элемент управления ListBox

    Представляет собой список с полосой прокрутки.

    (рис 6.3) Редактирование элементов ListBox(рис 6.2) Привязка ListBox'а к источнику данных

    Элемент управления ComboBox

    Представляет собой выпадающий список

    (рис 6.4) Задачи по привязке или заданию данных в элементе управления ComboBox

    Элемент управления TextBox

    Элемент управления TextBox генерирует однострочное текстовое поле и хранит в свойстве Text введенный пользователем текст. Данный элемент может работать в режиме пароля и в числовом режиме, но не поддерживает многострочного редактирования и не может выводиться как поле, доступное только для чтения. Вы можете задавать для него способ выравнивания и максимальную длину.

    Элемент управления InputPanel

    Обеспечивает управляемую реализацию элемента управления "программная панель ввода" в Windows Embedded CE. При создании приложения Windows, предназначенного для платформы Pocket PC, среда разработки Visual Studio автоматически добавляет компонент MainMenu в файл проекта для Form1. Этот компонент добавляет на форму нижнюю строку меню со значком программной панели ввода. Для использования программной панели ввода не требуется программирования: пользователи могут включать и отключать её отображение с помощью значка. Для программирования программной панели ввода необходимо перетащить компонент InputPanel с панели элементов ToolBox на форму.

    Программную панель ввода можно показать программно с помощью свойства Enabled, получить её размер - с помощью свойства Bounds, и определить размер области формы, не занятый этой панелью, - с помощью свойства VisibleDesktop. Обратите внимание, что для устройств Pocket PC свойство Bounds всегда возвращает ширину, равную 240 точкам, и высоту, равную 80 точкам, независимо от того, включена ли программная панель ввода. Событие EnabledChanged происходит каждый раз при включении или выключении программной панели ввода, как пользователем, так и программно. Обычно причиной для программирования программной панели ввода является изменение положения или размера элементов управления на форме, когда эта панель включена и отключена.

    В следующем примере на странице вкладки содержится текстовое поле. Программная панель ввода отображается на вкладке, когда текстовое поле получает фокус, при этом используется событие EnabledChanged, чтобы уменьшить высоту вкладки, когда эта панель включена, и восстановить исходную высоту, когда она выключена.

    private void textBox1_GotFocus(object sender, System.EventArgs e)
    {
        // Отображение InputPanel
        inputPanel1.Enabled = true;
    
    }
    private void inputPanel1_EnabledChanged(object sender, EventArgs e)
    {
        if (inputPanel1.Enabled == false)
        {
    // Поскольку InputPanel неактивна, высота вкладки устанавливается в               
    // исходное положение
            VisibleRect = inputPanel1.VisibleDesktop;
            tabControl1.Height = TabOriginalHeight;
        }
        else
        {
            // InputPanel активна, поэтому высота вкладки уменьшается
            VisibleRect = inputPanel1.VisibleDesktop;
            tabControl1.Height = VisibleRect.Height;
        }
    
    // Свойство Bounds всегда возвращает значения высоты 80 и ширины 240 пикселей 
    // для устройств PocketPC 
        BoundsRect = inputPanel1.Bounds;
    
        VisibleInfo.Text = String.Format("VisibleDesktop: X = {0}, " +
            "Y = {1}, Width = {2}, Height = {3}", VisibleRect.X,
            VisibleRect.Y, VisibleRect.Width, VisibleRect.Height);
        BoundsInfo.Text = String.Format("Bounds: X = {0}, Y = {1}, " +
            "Width = {2}, Height = {3}", BoundsRect.X, BoundsRect.Y,
            BoundsRect.Width, BoundsRect.Height);
    }

    Наиболее полную информацию о мобильных элементах управления можно получить на http://msdn.microsoft.com/ru-ru/library/aa139616.aspx

    6.3. Жизненный цикл мобильной страницы

    При проектировании веб - приложений для мобильных устройств важно учитывать особенности жизненного цикла мобильной страницы.

    Жизненный цикл мобильной страницы ASP.NET, этапы которого перечислены ниже, практически идентичен жизненному циклу обычной страницы Web Forms. Он включает те же события, хотя поведение системы до и после их генерирования разное.

  • Инициализация страницы. На этом этапе определяется адаптер устройства, который будет использоваться при формировании вывода страницы, и устанавливается свойство Adapter класса MobilePage. Поиск адаптера начинается с файла machine.config, затем производится в файле web.config из корневого каталога сайта, а уж потом - в файлах web.config, расположенных ниже по иерархии. Адаптер выбирается на основе характеристик текущего устройства. Обратите внимание: с целью повышения производительности адаптер кэшируется, поэтому его поиск для каждого пользовательского агента производится один раз.
  • Загрузка состояния представления. На данном этапе восстанавливается сохраненное состояние страницы. Никакие события с этим этапом не ассоциированы.
  • Загрузка данных возврата страницы. Страница загружает входящие данные формы, кэшированные в объекте Request, и соответствующим образом обновляет свои свойства. Никакие пользовательские события с данным этапом не ассоциированы.
  • Загрузка пользовательского кода. Страница готова к выполнению инициали-зационного кода, связанного с ее логикой и поведением. Она генерирует событие Load и загружает информацию с учетом специфики адаптера устройства. Если вы хотите управлять этим этапом, то можете реализовать обработчик данного события как для страницы, так и для адаптера.
  • Отправка уведомлений об изменении возвращенных данных формы. Элементы управления, входящие в состав страницы, генерируют события изменения, если их состояние изменилось со времени последнего возврата формы. Для того чтобы элемент управления мог генерировать на этом этапе событие изменения состояния, в нем нужно реализовать интерфейс IPostBackDataHandler. Пользовательские события на данном этапе не генерируются.
  • Обработка события возврата формы. Страница выполняет код, связанный с событием, которое вызвало возврат формы.
  • Предрендеринг. Перед рендерингом вывода код получает последнюю возможность внести какие-либо изменения. Событие, с которым разработчик может связать соответствующий код мобильной страницы или адаптера устройства, называется PreRender. Именно на этом этапе производится разбивка на страницы. Вывод страницы формируется с учетом параметров разбивки.
  • Сохранение состояния представления. Состояние страницы сериализуется в строку, которая затем сохраняется - обычно в виде скрытого поля. Пользовательские события на данном этапе не генерируются.
  • Рендеринг страницы. Страница генерирует вывод, который будет направлен клиенту. За вывод дочерних элементов управления в нужном порядке отвечает адаптер.
  • Выгрузка страницы. На этом этапе адаптер устройства выполняет необходимые финальные операции. Событие Unload доступно и странице, и адаптеру устройства.
  • 6.4. Разработка архитектуры приложения

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

    Поэтому разработчик мобильного приложения, в особенности предназначенного для сотовых телефонов, должен хорошо усвоить следующее правило: один дополнительный щелчок предпочтительнее набора текста. Для персонализации и оптимизации вывода приложения используйте имеющуюся информацию о пользователе (его имя, адрес электронной почты, профиль или даже местоположение).

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

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

    Пример простейшей системы авторизации.

    В данной задаче, для простоты реализации, имена учетных записей пользователей и пароли будут храниться в базе данных SQL на локальной машине.

  • Добавьте на форму следующие элементы управления:
  • TextBox tbLogin
  • TextBox tbPassword
  • Label lLogin
  • Label lPassword
  • Button btnAuth
  • Label lAuthStatus
  • (рис 6.5)
  • Задайте значение свойства (рис 6.6)
  • На событие Click кнопки btnAuth "определим следующий код"
    private void btnAuth_Click(object sender, EventArgs e)
    {
        //задаем свойства подключения к БД
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = "Data Source=N121-6\\SQLEXPRESS;Initial Catalog=mobile;Integrated Security=True";
        bool check = false;
        try
        {
            conn.Open();
            //определяем запрос для проверки правд доступа учетной записи
            SqlCommand cmd = new SqlCommand("Select * From Users");
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                if (dr["Login"].ToString() == tbLogin.Text)
                {
                    if (dr["Password"].ToString() == tbPassword.Text)
                    {
                        //если проверка имени учетной записи и пароля прошла успешно - выходим из цикла
                        check = true;
                        break;
                    }
                }
            }
            conn.Close();
        }
        catch (Exception exc)
        {
            MessageBox.Show("" + exc.Message);
        }
        //в случае успешной авторизации выводим соотествующее сообщение
        if (check)
        {
            lAuthStatus.Text = "Авторизация прошла успешно";
            lAuthStatus.Visible = true;
        }
    
    }
  • Вернуться к учебному плану