Как стать автором
Обновить

Как программно узнать аппаратные характеристики устройства на Windows Phone 7.1. Mango

Время на прочтение4 мин
Количество просмотров2.6K
Два дня назад скачал новый пакет для разработки под Windows Phone 7.1 (Mango) и стал изучать новые возможности. Обнаружил, что что класс DeviceExtendedProperties теперь является устаревшим и не рекомендован к использованию (deprecated). На смену ему пришел более понятный и удобный класс DeviceStatus. Вот о нем и поговорим.

Новый класс DeviceStatus относится к тому же пространству имен Microsoft.Phone.Info, что и устаревший DeviceExtendedProperties. Очень удобно, что не нужно запоминать новые названия свойств. Они остались прежними — просто изменился синтаксис. Для примера в старой версии было:
textBlockGetManufacture.Text = DeviceExtendedProperties.GetValue("DeviceManufacturer").ToString();

Стало:
textBlockGetManufacture.Text = Microsoft.Phone.Info.DeviceStatus.DeviceManufacturer;


Кроме того, в класс DeviceStatus были добавлены новые полезные свойства, связанные с клавиатурой и питанием.
Чтобы увидеть все изменения, я взял за основу свой старый пример Аппаратные характеристики устройства Windows Phone 7 и стал его перерабатывать.
Сначала я запустил старый проект, написанный еще для Windows Phone 7. Затем в меню Project выбрал Properties и в открывшемся окне выбрал в списке Target Windows Phone Version значение Windows Phone 7.1

Теперь осталось заменить устаревшие свойства на новые:

        public MainPage()
        {
            InitializeComponent();

            timer = new DispatcherTimer();
            timer.Interval = new TimeSpan(0, 0, 10);
            timer.Tick += new EventHandler(timer_Tick);
        }

        DispatcherTimer timer;
        

        private void butGetInfo_Click(object sender, RoutedEventArgs e)
        {
            // Производитель
            // Устарело
            // textBlockGetManufacture.Text = DeviceExtendedProperties.GetValue("DeviceManufacturer").ToString();
            // Новое в Windows Phone 7.1 Mango
            textBlockGetManufacture.Text = Microsoft.Phone.Info.DeviceStatus.DeviceManufacturer;

            // Название устройства
            // Устарело
            // textBlockGetName.Text = DeviceExtendedProperties.GetValue("DeviceName").ToString();
            // Новое в Windows Phone 7.1 Mango
            textBlockGetName.Text = Microsoft.Phone.Info.DeviceStatus.DeviceName;
           
            // Уникальный номер устройства
            byte[] id = (byte[])DeviceExtendedProperties.GetValue("DeviceUniqueId");
            textBlockGetID.Text = BitConverter.ToString(id);
            
            // Версия прошивки
            // Устарело
            // textBlockGetFirmware.Text = DeviceExtendedProperties.GetValue("DeviceFirmwareVersion").ToString();
            // Новое в Windows Phone 7.1 Mango
            textBlockGetFirmware.Text = Microsoft.Phone.Info.DeviceStatus.DeviceFirmwareVersion;

            // Аппаратная версия
            // Устарело
            // textBlockGetHardware.Text = DeviceExtendedProperties.GetValue("DeviceHardwareVersion").ToString();
            // Новое в Windows Phone 7.1 Mango
            textBlockGetHardware.Text = Microsoft.Phone.Info.DeviceStatus.DeviceHardwareVersion;
            
            // Общая память на устройстве
            // Устарело
            //var maxmem = (long)DeviceExtendedProperties.GetValue("DeviceTotalMemory");
            // maxmem /= 1024 * 1024;
            //textBlockGetTotalMemory.Text = maxmem.ToString();
            // Windows 7.1. Mango
            var totalmem = Microsoft.Phone.Info.DeviceStatus.DeviceTotalMemory;
            totalmem /= 1024 * 1024;
            textBlockGetTotalMemory.Text = totalmem.ToString();

            // Новое в Windows 7.1 Mango

            // Выдвинута ли клавиатура
            textBlockGetKeyboardDeploy.Text = Microsoft.Phone.Info.DeviceStatus.IsKeyboardDeployed.ToString();

            // Есть ли физическая клавиатура
            textBlockGetPresentKeyboard.Text = Microsoft.Phone.Info.DeviceStatus.IsKeyboardPresent.ToString();

            // Источник питания
            textBlockGetPowerSource.Text = Microsoft.Phone.Info.DeviceStatus.PowerSource.ToString();
            

        }

        private void buttonMemory_Click(object sender, RoutedEventArgs e)
        {
            timer.Start();
        }

        void timer_Tick(object sender, EventArgs e)
        {
            try
            {
                // Устарело
                // textBlockGetCurrentMemory.Text = DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage").ToString();
                // textBlockGetPeakMemory.Text = DeviceExtendedProperties.GetValue("ApplicationPeakMemoryUsage").ToString();
                // Windows 7.1. Mango
                textBlockGetCurrentMemory.Text = Microsoft.Phone.Info.DeviceStatus.ApplicationCurrentMemoryUsage.ToString();
                textBlockGetPeakMemory.Text = Microsoft.Phone.Info.DeviceStatus.ApplicationPeakMemoryUsage.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }




Для удобства я разделил логику кода на две части. В первой части я вывожу на экран значения постоянных свойств: название изготовителя, номера прошивки и общий объем памяти. Стоит отметить, что в устаревшем классе DeviceExtendedProperties можно было получить уникальный номер устройства через свойство DeviceUniqueId. В новом классе аналога не нашлось. Также я обратил внимание, что раньше для общей памяти возвращалось значение 371, а в Mango стало 435 Мб.

Новые свойства Mango


Теперь несколько слов о новинках. Появилось новое свойство IsKeyboardPresent, которое определяет наличие аппаратной клавиатуры на устройстве. На эмуляторе всегда возвращается True, так как эмулятор видит вашу настольную клавиатуру. Вспоминается, что на эмуляторе Windows Mobile было такое же поведение. Можно попробовать выдернуть провод клавиатуры из системника и посмотреть на результат, но я решил оставить изучение этого вопроса вам.
Также появилось новое свойство IsKeyboardDeployed, которое работает в связке с предыдущим свойством. С его помощью можно узнать, выдвинул ли пользователь клавиатуру для работы или нет. Перед использованием данного свойства имеет смысл удостовериться в наличии аппаратной клавиатуры при помощи IsKeyboardPresent.
Еще одно полезное свойство — PowerSources. С его помощью можно узнать, работает ли устройство от аккумуляторной батареи или от внешнего источника (электрическая розетка или подключен к компьютеру).

Android, ay


В одной из своих последних публикаций на Хабре, я предложил программистам, которые пишут приложения под Android, написать аналог описываемой програмы. Предлагаю продолжить традицию и рассказать, как можно получить аппаратные характеристики телефона на Android.
Был бы рад также ответу от iPhone-разработчиков.
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 11: ↑7 и ↓4+3
Комментарии0

Публикации

Истории

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань