среда, 25 декабря 2013 г.
Android с Ubuntu Touch на борту, двойная загрузка
Переключение осуществляется по средствам приложений, написанных для Android и Ubuntu Touch. Поддерживаются как официальные прошивки Android, так и сборки от сторонних команд вроде CyanogenMod и AOSP. Решение пока не рассчитано на массового пользователя, а нацелено на разработчиков мобильных приложений. Установив Ubuntu Touch на телефон базирующийся на Android, он легко сможет переключаться на среду разработки в Ubuntu, не потеряв преимуществ Android для повседневного использования.
При двойной загрузке Ubuntu Touch устанавливается в сисемный раздел “/recovery” Android, предназначенный для восстановления операционной системы. Получается, что в режиме восстановления стартует Ubuntu Touch, а при обычном запуске Android. Образ Ubuntu Touch и системные данные хранятся в раздела ОС Android, в частности образ размещается в /data/system.img, пользовательская и системная информация в разделах /data/user-data пользовательские, /data/system-data системные соответственно. Установка, а также обновление ОС Ubuntu Touch происходит через приложение в Android.
Метод двойной загрузки прошёл тестирование на Nexus 4, и скорее всего должен работать и на других продуктах линейки Nexus.
вторник, 18 июня 2013 г.
Современное изобретение компании HTC смартфон HTS Desire 600 с двумя постоянно активными Sim - картами
Шаг в современность, можно будет сделать благодаря компании HTC и его новому изобретенному смартфону HTC Desire 600. Хотя, apache m76 тоже солидный аппарат. Новая модель смартфона имеет две Sim - кары, которые постоянно активны. Он имеет возможности интерфейса HTC Sense 5 – HTC BlinkFeed и HTC BoomSoud, а также четырехъядерный процессор. Эта модель смартфона позволяет в полной мере использовать OC Android Selly Bean, а также дополнительные возможности – в автоматическом режиме создавать видеоролики Video Highlights.
Смартфон, сделанный в современном времени имеет высокую скорость, позволяет просматривать интернет – страницы с быстротой ветра. Поскольку две Sim - карты постоянно активные – это дает возможность переходить из одного к другому мобильному аккаунту, без лишних проблем и задержек, а также переключатся между линиями во время разговора или принимать звонок по одной линии, разговаривая при этом по другой. Такие возможности смартфон имеет благодаря встроенной системе dual aktive.
Смартфон оснащен функцией HTC BlinkFeed, которая позволяет просматривать информацию в реальном времени, а экран, который имеет 4,5 дюйма, показывает новости и обновление социальных сетей, поэтому всегда есть, возможность находится, в центре всех событий. Эта модель смартфона позволяет делать в автоматическом режиме пара - секундные ролики высшего качества, не нуждаясь при этом в видеоредакторе ПО. Такая возможность предоставлена благодаря камере, которая имеет 8 – мегапиксель или 1,6 – мегапиксель, а также функции HTS Video Highlights. Выбирая разную музыку можно менять последовательность кадров в одно прикосновение.
Смартфон также имеет двойные динамики, которые размещаются на передней панели и имеют встроенные усилители. С помощью этих мощнейших динамиков звучание становится более чистым, насыщенным и приятным в прослушивании будь то музыкальный шедевр, видеоигра или просмотр фильма. С помощью новой модели смартфона станет возможным узнавать первые новости, не чувствуя никаких неудобств, использовать его вместо телевизора и электронного ящика, создавать библиотеки полные музыки и видеороликов, в полной мере участвовать в развлекательных играх.
Модель нового смартфона очень скоро можно встретить в продаже. О них можно спрашивать у мобильных операторов, в онлайн или в интернет магазинах
суббота, 25 мая 2013 г.
Износоустойчивые планшеты переходят на 7"Android
По ожиданиям маркетологов, 7-ми и 8-ми дюймовые таблеты перевернут рынок износоустойчивых планшетов с ног на голову в следующем году.Так что некоторые компании,например тайваньская Getac и компания страны восходящего солнца - Panasonic начали осваивать этот рынок.
Давайте поговорим немного побольше о некоторых моделях вышеуказанных производителей. Getac продемонстрировала таблет Getac Z710 - устойчивое к падению с высоты до 6 футов устройство, работающее под управлением платформы Android 4.1, внутри - двухядерный процессор TI OMAP 4430 с частотой 1 гигагерц, 7-дюймовый емкостной поддерживающий работу в перчатках дисплей LumiBond и высокочувствительный GPS модуль. Длина гаджета - 21,8; ширина - 14,2; и, самый интригующий параметр: толщина - 2,7 см. Температуры, в которых возможна работа устройства от -20 до 50 градусов по Цельсию.
Теперь о потребителях. Данный гаджет рассчитан, прежде всего, на рынок коммунальных услуг, электроники автомобилей, ну и, конечно же, на обычных потребителей, которые боятся разбить свой дорогой таблет. Теперь ставим обои музыка на рабочий стол и ничего не страшась таскаем свой девайс с собой в любые экстремальные путешествия.
А panasonic, тем временем, тоже не дремлет. На данный момент этой компании принадлежит больше половины всех моделей удароустойчивых устройств. И она преподнесла семи дюймовый Toughpad JT-B. Этот планшет получил соответствие сертификату по стандарту MIL-STD-810G в США.
вторник, 21 августа 2012 г.
Lenovo выпустит свой первый смартфон на базе четырехъядерного процессора
Мировой лидер в разработке современной электроники компания Lenovo показала свое новое устройство - смартфон IdeaPhone K860. В скором времени ожидается официальный серийный выпуск новинки на китайском рынке технологических разработок.
Компания-производитель, кроме фирменного дизайна, и именного интерфейса, оборудовала свой первый смартфон мощным процессором в четыре ядра, операционкой Android 4.0 Ice Sandwich, и качественным микропроцессорным набором Samsung Exynos. Кроме того, новое творение от Lenovo оснащено 5-дюймовым экраном, с HD-разрешением равным 1280 на 720, аккумуляторной батареей на 2250 мАч, оперативной памятью в 1Гб, основной 8 мегаписксельной и фронтальной 2-х мегапиксельной камерами. Смартфон IdeaPhone K860 поддерживает карты MicroSD, что позволяет значительно расширить память телефона.
Конкретные сроки поступления смартфонов Lenovo IdeaPhone K860 в свободную продажу компания пока не разглашает. Также не известна до сих пор цена на этот продукт. Скорее всего, представители Lenovo внесут ясность на официальном представлении новой модели.
Честно говоря, у меня такое подозрение, что скоро даже електробритви будут со встроенным модулем 3G и Wi-Fi.
понедельник, 2 июля 2012 г.
Samsung I9103 Galaxy R
Поддержка аудио форматов: MP3/WAV/eAAC+.
Поддержка видео форматов: MP4/DivX/XviD/WMV/H.264/H.263, Adobe Flash.
Предустановленные приложения: Google Search, Maps, Gmail, YouTube, Calendar, Google Talk, Picasa, редактор документов (Word, Excel, PowerPoint, PDF).
Приблизительная цена 469.00 $
Подробная информация:
Память :
1024 МБ оперативной памяти;
Встроенная 8ГБ;
Flash (microSD до 32 Гб).
Коммуникационные возможности:
EDGE/GPRS ;
HSDPA 7.2Mbps;
Wi-Fi 802.11 b/g/n, DLNA ;
Разъем 3,5 мм.;
Bluetooth 3.0+HS (A2DP);
USB 2.0.
Размеры:
Толщина – 9.5 мм.;
Ширина – 125 мм.;
Длина – 66 мм.;
Вес 135г.
Процессор:
Двухъядерный ARM Cortex-A9 (1.2 ГГц);
GeForce, чипсет Tegra 2.
Камера:
Фото 2592x1944 точек;
Видео 1280х720 точек;
Видеозапись HD-видео (720p);
Количество мегапикселей - 5 Мп;
Цифровой зум ;
Автофокус.
суббота, 24 марта 2012 г.
Бюджетный планшет Yashi YPad A7 для бизнесменов
Для ведения бизнеса требуется хорошая память, умение организовать время и вести несколько дел одновременно. Сейчас предпринимателям помогает справится со всем эти ноутбук или компьютер, которых хранит всю бухгалтерию, переписку, контакты и многое другое. С помощью ноутбука можно помнить гораздо больше и заметно облегчить свою работу. Но ноутбук, как и настольный компьютер не самый подходящий вариант для ведения бизнеса, так как использовать их можно только в офисах, дома или в кафе, другими словами они не обладают той мобильностью, которая требуется в современном мире.
Оптимальным вариантом в данном случае станет планшетный компьютер. Он намного больше мобильного телефона, что значительно упрощает работу и при умелом использовании может полностью заменить вам ноутбук. Сегодня я расскажу о подходящей современному бизнесмену модели планшетного компьютера от небольшой компании Yashi, которая получила свою известность благодаря бизнес планшету YPad W7.
Новая модель называется Yashi YPad A7 и работает под операционной системой Android 2.2. Технические характеристики достаточно скромны: 800МГц процессор, 512Мб оперативной и 4Гб встроенной памяти , а также слот для карточек памяти. Стоит отметить и 2Мп камеру для фото и 0.3Мп камеру для видеосвязи, а также поддержку сетей 3G и Wi-Fi. Аккумулятор планшета достаточно емкий и составляет 4200мАч. На этом характеристики планшета заканчиваются, и похвастаться более нечем. Однако этого вполне достаточно для ведения дел, так как наличие множества функций просто запутает вас, не позволяя нормально работать. Стоимостью модели многие будут довольны, ведь это всего 230 долларов.
Кстати, на igrosoft можно найти игры для различной компьютерной техники.
пятница, 24 июня 2011 г.
Неделя с Samsung Galaxy Tab - полет нормальный
Сейчас эмоции улеглись и можно более-менее трезво сделать несколько заметок о б этом девайсе и установленной на нем операционной системе.
Ну, во-первых я таки оценил все удобство установки программ с помощью Андройд-Маркета. Принцип тот-же что и в Убунту. Имеется удаленный ремпозиторий в котором хранятся пакеты и вся информация о них. Ваш Андройд получает к хранилищу удаленный доступ и устанавливает нужный софт. Слабым местом является обязательное наличие выхода в Интернет. Но, в отличии от того же нетбука, которому нужна стационарная сеть или wi-fi, планшеты и смартфоны имеют доступ к мобильному интернету через GPRS. Да, устанавливать программы через мобильную связь дороговато. Но это возможно.
Во-вторых, меня приятно удивила выносливость аккумулятора. В режиме активного использования он выдерживает 7 часов, а в режиме чтения книг и просмотра почты протянет и весь световой день. Для планшета это очень неплохо.
Пока все. Дальше расскажу более подробно об отдельных группах программ и лучших их представителей.
пятница, 17 июня 2011 г.
Samsung Galaxy Tab - я начал личное знакомство
Буквально за день я освоился и подобрал в Андроид-маркете программы которые позволяют не только скачать фильмы, музыку и проигрывать их на планшете. Я имею клиент для общения в социальных сетях и отправки текстовых сообщений, несколько браузеров на выбор, офисные пакеты как для онлайнового так и оффланового редактирования документов. Есть и много других полезностей.
Отмечу, что пока я устанавливаю только бесплатные программы, хотя, есть огромное количество софта платного, но типа более функционального. Надеюсь мне эта повышенная функциональность не понадобиться.
Сейчас изучаю девайс и вскоре, надеюсь поведаю о своих впечатлениях и о различных программах.
суббота, 29 января 2011 г.
Конкурс для разработчиков Android-приложений
HTC начинает новый конкурс для разработчиков Android-приложений. Называется он HTC Android Developers Contest 2.0 и ориентирован больше на украинских программистов. Задача конкурса довольно благородная – создание локализованных приложений для украинских пользователей.
Весь процесс конкурса разделен на несколько этапов:
• 25.01 — открыта предварительная регистрация разработчиков на сайте конкурса (ссылка выше);
• 1.02 — 30.04 — открыта возможность загрузки приложений на сайт;
• 26.02 — HTC Android Hackaton;
• 1.05 — 15.05 — голосование за лучшее приложение по мнению пользователей;
• 16.05 — 31.05 — жюри определит победителей;
• 01.06 — ну и официальное объявление победителей конкурса HTC ADC 2.0.
Хочу отметить, что организаторы довольно веско мотивируют программистов. Победители получат:
1-е место — 50 000 грн. и Desire HD
2-е место — 20 000 грн. и Desire HD
3-е место — Desire HD
Есть и специальный приз конкурса - смартфон HTC Desire для приложения, получившего наибольшее количество голосов пользователей.
Но претендентам придется пройти определенный отбор. Ведь в конкурсе могут принять участие совершеннолетние граждане Украины. Причем это могут быть как отдельные разработчики, так и команды разработчиков, сборные университетов и отдельных компаний. Участник может подать на конкурс больше одной программы.
Но учтите, что к участию допускаются только те программы, которые на момент подачи не доступны на Android Market.
Кроме того, программа должна распространяться бесплатно и иметь украиноязычный или многоязычный интерфейс, с возможностью выбора украинского или русского языка. Но организаторы оставляют за участником все права на интеллектуальную собственность приложения, представленного на конкурс. В том числе, участник имеет право создавать на базе представленного приложения коммерческую версию.
Ну а вы можете прямо сейчас получить бесплатные фоторамки онлайн, без конкурсов и отборов украсив свою фотоколлекцию.
вторник, 4 января 2011 г.
Китайцы вскрыли Android
Новый вирус получил название Geinimi, это не первый троян, обнаруженный на мобильных устройствах. Как и другие, Geinimi предназначен для управлениями функциями гаджета с сервера злоумышленников без ведома владельца. Чаще всего троянская программа используется для отправки СМС на платные номера.
Новый же вирус, кроме этого, способен обеспечивать сбор данных о гаджете, включая GPS координаты устройства, идентификатор IMEI и индивидуальный номер абонента IMSI. И полученную информацию передавать на сервера хакеров. Вместе с передачей данных Geinimi может создавать из зараженных устройств ботнет – сеть, устройства в которой могут быть использованы в масштабных вредоносных целях, например, для DDoS-атак на серверы.
Особо опасным Geinimi делает беспрецедентная система защиты вирусной программы. Передача всех данных злоумышленникам происходит в зашифрованном виде. Это требует особых усилий по обнаружению вредоносной программы и ее обезвреживанию.
Подцепить новый вирус можно через приложения, скачанные с неофициальных магазинов приложений для Android. После установки зараженного приложения вирус получает полные права доступа к ПО гаджета.
На Android Market приложений, зараженных новым вирусом, обнаружено не было, но это не исключает того, что они могут там появиться. Поэтому всем пользователям стоит следить за тем, какие приложения они устанавливают на свой смартфон или КПК, и какие разрешения дают при его установке. Для скачивания приложений стоит использовать только проверенные источники.
Любителям фантастики стоит обратить внимание на книгу Корну. Лев Соколов. И в первую очередь на электронный вариант книги, который можно читать даже на мобильниках.
понедельник, 26 апреля 2010 г.
Конкурс для разработчиков Android приложений в Украине
- Участниками конкурса могут быть только граждане Украины.
- Сотрудники агентства HOSHVA PR, а также члены их семей не могут участвовать в конкурсе.
- Только совершеннолетние (18 лет) могут принять участие в конкурсе.
- Если участник конкурса тем или иным образом нарушит эти положения, он будет немедленно исключен из конкурса.
- Участие в конкурсе могут как отдельные разработчики, так и команды разработчиков, сборные университетов и отдельных компаний. Отдельные разработчики и команды равны в своих правах.
- Приложение (application), который будет подан на конкурс, должен быть новым и до момента подачи не опубликованным в Android Market.
- Как отдельные разработчики, так и команды могут подать на конкурс несколько приложений (applications).
- Приложения (applications) должны быть с украиноязычным интерфейсом или иметь многоязычный интерфейс с возможностью выбора украинского или русского языка.
- Все разработчики помимо выполнения этих Правил должны выполнять правила Android Market Content Policy для разработчиков (включая правила Android Market Developer Distribution Agreement и др.). Ознакомиться с этими правилами можно по ссылкеhttp://www.android.com/market/terms/developer-content-policy.html.
Бороться с неприятными запахами, возникающими при приготовлении пищи, можно легко. Достаточно купить вытяжки Донецк и воздух на кухне будет свежим.
А для теплоизоляции сегодня весь мир использует стеклопакеты. Окна из ПВХ долговечны и просты в эксплуатации.
Если вы нуждаетесь в перемещении большого количества грузов по территории предприятия, то продажа болгарских погрузчиков поможет решить эту проблему. Они надежны и экономичны.
суббота, 12 сентября 2009 г.
CLIQ — первый андроидфон от Motorola
Характеристики:
- Сети: GSM, 3G, WiFi, EDGE Class 12, GPRS Class 12
- Экран: 320 x 480 pixels, 187 PPI; 3.1" HVGA screen
- Операционная система: Android 1.5 (Cupcake)
- Форм-фактор: слайдер
- Музыка: AAC, AAC+, AAC+ Enhanced, AMR NB, MIDI, MP3, WAV,
- Видео: воспроизведение - H.264, H.263, MPEG 4, YouTube; потоковое: MPEG 4, 3GP
- Батарея: 1420 мАч, литиево-полимерная
Время разговора 6 часов, время ожидания 325 часов.
Особо стоит отметить наличие в аппарате 5Mp камеры, аппаратной клавиатуры с пятипозиционным джойстиком, множество удобных функциональных кнопок и собственную надстройку MOTOROLA над платформой Adnroid — MOTOBLUR, которая служит уникальным идентификатором для всех социальный сетей, доступных в CLIQ.
Процессор в CLIQ - Qualcomm 7201a, 528 МГц, аппарату доступны 256 мегабайт оперативной, и 512 мегабайт внутренней Flash памяти. Устройство оснащено слотом для Flash-карточек, с поддержкой карт до 32 Гб.
Если хотите блеснуть красноречием во время застолья, тосты в прозе именно то, что вам надо.
Любителей микроблогинка порадует новость, что появился русский аналог твитера, ничем особо не отличающийся от забугорного родителя.
четверг, 27 августа 2009 г.
Новые интернет-планшеты
В интернете уже появлялись фотографии интернет-планшета Nokia N900. А сегодня французский сайт Be Geek опубликовал первое официальное изображение этого аппарата.
Собственно, ничего нового на нем нам заметить не удалось. Тем не менее, сам факт появления официальных фотографий Nokia N900 говорит о том, что и сама новинка вскоре будет представлена официально.
Напомним, что Nokia N900 работает под управлением операционной системы Maemo 5. Он обладает процессором OMAP3430 с тактовой частотой 500/600 МГц, 3,5-дюймовым сенсорным дисплеем с разрешением 800 х 480 пикселей, 5-мегапиксельной камерой с двойной LED-вспышкой, автофокусом, оптикой Carl Zeiss и сдвигающейся крышкой, 1 гигабайтом виртуальной памяти (256 мегабайт физической оперативной памяти и 768 мегабайт виртуальной памяти), Bluetooth 2.1 с поддержкой стереопрофиля A2DP, Wi-Fi 802.11b/g, aGPS и 32 гигабайтами встроенной памяти с возможностью расширения до 48 гигабайт (с помощью карт памяти).Но и конкуренты не спят!
Согласно информации ресурса Engadget, ссылающегося на утечку информации из FCC (Federal Communication Commission - Федеральная комиссия связи в США), компания Archos подготовила к выпуску два портативных интернет-устройства IMT (Internet Media Tablet): A5S (модель 7501) и A5H (модель 7502). Предварительные слухи о их скором релизе появились еще 1,5 месяца назад.
Интернет медиа планшет A5S содержит большой 4,8-дюймовый сенсорный экран, слот для установки карты памяти формата microSD и разъем microUSB. Также устройство оснащается модулями беспроводной связи Wi-Fi 802.11b/g/n, Bluetooth 2.1+EDR и тюнером FM радио. Кроме этого, в инструкции пользователя упоминается наличие модема 3G, но, скорее всего, данная опция станет доступна только покупателям модели A5H. Оба устройства основаны на базе платформы Android. Более детальная информация о них пока не разглашается.
Ожидается, что официальный анонс интернет медиа планшетов Archos A5S и A5H состоится 15 сентября, но уровень их цен пока не разглашается.
Кстати, для тех, кто все еще пользуется для интернет-серфа традиционными компьютерами,весьма полезно ознакомится со всем спектром специализированного софта. Например узнать какие есть на сегодня браузеры или почтовые клиенты. А главное сравнить их функциональность.
суббота, 30 мая 2009 г.
18 Android до конца года
Рубин отказался назвать конкретных производителей и конкретные модели. В данный момент в продаже есть всего два «андроида»: это T-Mobile G1 в США и HTC Magic в Европе.
По словам Рубина, сейчас производители устройств могут выбрать один из трёх вариантов использования платформы Android. Все они бесплатны.
1. Без обязательств. Производитель скачивает бесплатный дистрибутив с сайта, устанавливает на устройтсва и загружает туда любые сервисы, кроме приложений Google.
2. То же самое, но с подписанием соглашения о распространении сервисов Google. В этом случае производитель получает доступ к Gmail, Google Calendar и другим сервисам. Такую опцию выбрали для 12-14 из всех 18-20 моделей, которые выходят на рынок.
3. Вариант “The Google Experience” — телефоны с логотипом Google на корпусе и обязательства по гарантированной поддержке приложений Google, а также обязательства оператора связи и производителя не вмешиваться в процесс распространения приложений между компанией Google и владельцами телефонов. К этой категории относятся 5 или 6 новых моделей.
Для того, чтобы оказаться в тропическом раюю уже нет необходимости покидать наши широты. Достаточно отправиться в ... Побмосковье! Посетив парк-отель Foresta Tropicana (http://r-prostory.ru/rest/foresta-tropicana.php) любой желающий может окунутся в многообразный мир отдуха. Посетить бассейны, сауны, спа-салоны и т.д. Комплекс Фореста Тропикана расположен в Солнечногорском районе, на северо-западе Подмосковья, в 26 км от МКАД по Пятницкому шоссе.
четверг, 7 мая 2009 г.
Появились фотографии смартфона HTC Hero с Android
На ресурсе CodeAndroid.org появились первые неофициальные фотографии нового Android-смартфона компании HTC — Hero.
Фото прислал «анонимный читатель», который также сообщил, что начало продаж смартфона запланировано на третий квартал этого года.
Тот факт, что HTC Hero действительно станет очередным Android-смартфоном HTC, подтверждался уже неоднократно: об этом сообщалось в roadmap компании на 2009 год, а также в анонсе французского отделения оператора Orange, объявившего о намерении продавать в этом году HTC Hero с Android.
// via linuxphone.ru
P.S. Другие фотографии:
А тем кто увлекается украшательством собственого бела пригодиться ресурс где есть все для татуировки, татуировки, эскизы татуировок и прочие прибамбасы.
Ну а если тело требует помощи, то-есть лечения, то тогда вам сюда. Помогут Медицинские средства лечения от Travoved.Ru.справочник организаций и предприятий.
воскресенье, 26 октября 2008 г.
Знакомство с Android. Часть 4: Использование GridView
Итак, в нашем приложении осталось всего ничего: реализовать собственно алгоритм игры Life и отобразить его в GridView. Этим-то мы сейчас и займёмся.
Класс, реализующий логику Life
Добавим в проект новый класс, назовем его LifeModel
. Тут у нас будет реализована вся логика Life
package com.android.life; import java.util.Random; public class LifeModel { // состояния клетки private static final Byte CELL_ALIVE = 1; // клетка жива private static final Byte CELL_DEAD = 0; // клетки нет // константы для количества соседей private static final Byte NEIGHBOURS_MIN = 2; // минимальное число соседей для живой клетки private static final Byte NEIGHBOURS_MAX = 3; // максимальное число соседей для живой клетки private static final Byte NEIGHBOURS_BORN = 3; // необходимое число соседей для рождения клетки private static int mCols; // количество столбцов на карте private static int mRows; // количество строк на карте private Byte[][] mCells; // расположение очередного поколения на карте. //Каждая ячейка может содержать либо CELL_ACTIVE, либо CELL_DEAD /** * Конструктор */ public LifeModel(int rows, int cols, int cellsNumber) { mCols = cols; mRows = rows; mCells = new Byte[mRows][mCols]; initValues(cellsNumber); } /** * Инициализация первого поколения случайным образом * @param cellsNumber количество клеток в первом поколении */ private void initValues(int cellsNumber) { for (int i = 0; i < mRows; ++i) for (int j = 0; j < mCols; ++j) mCells[i][j] = CELL_DEAD; Random rnd = new Random(System.currentTimeMillis()); for (int i = 0; i < cellsNumber; ++i) { int cc; int cr; do { cc = rnd.nextInt(mCols); cr = rnd.nextInt(mRows); } while (isCellAlive(cr, cc)); mCells[cr][cc] = CELL_ALIVE; } } /** * Переход к следующему поколению */ public void next() { Byte[][] tmp = new Byte[mRows][mCols]; // цикл по всем клеткам for (int i = 0; i < mRows; ++i) for (int j = 0; j < mCols; ++j) { // вычисляем количество соседей для каждой клетки int n = itemAt(i-1, j-1) + itemAt(i-1, j) + itemAt(i-1, j+1) + itemAt(i, j-1) + itemAt(i, j+1) + itemAt(i+1, j-1) + itemAt(i+1, j) + itemAt(i+1, j+1); tmp[i][j] = mCells[i][j]; if (isCellAlive(i, j)) { // если клетка жива, а соседей у нее недостаточно или слишком много, клетка умирает if (n < NEIGHBOURS_MIN || n > NEIGHBOURS_MAX) tmp[i][j] = CELL_DEAD; } else { // если у пустой клетки ровно столько соседей, сколько нужно, она оживает if (n == NEIGHBOURS_BORN) tmp[i][j] = CELL_ALIVE; } } mCells = tmp; } /** * @return Размер поля */ public int getCount() { return mCols * mRows; } /** * @param row Номер строки * @param col Номер столбца * @return Значение ячейки, находящейся в указанной строке и указанном столбце */ private Byte itemAt(int row, int col) { if (row < 0 || row >= mRows || col < 0 || col >= mCols) return 0; return mCells[row][col]; } /** * @param row Номер строки * @param col Номер столбца * @return Жива ли клетка, находящаяся в указанной строке и указанном столбце */ public Boolean isCellAlive(int row, int col) { return itemAt(row, col) == CELL_ALIVE; } /** * @param position Позиция (для клетки [row, col], вычисляется как row * mCols + col) * @return Жива ли клетка, находящаяся в указанной позиции */ public Boolean isCellAlive(int position) { int r = position / mCols; int c = position % mCols; return isCellAlive(r,c); } }
GridView. Отображение первого поколения клеток
Модифицируем разметкуrun.xml
так, чтобы она выглядела следующим образом: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <GridView android:id="@+id/LifeGrid" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="1dp" android:verticalSpacing="1dp" android:horizontalSpacing="1dp" android:columnWidth="10dp" android:gravity="center" /><Button android:id="@+id/CloseButton" android:text="@string/close" android:textStyle="bold" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>
Теперь нам надо отобразить в этом GridView данные. Думаю, вполне логичным для данной задачи было бы отображение клеток в виде графических файлов. Создаем два графических файлика, на одном изображаем черный квадратик, на другом - зелёный. Первый назовём empty.png
и он будет обозначать пустую клетку, второй - cell.png
, и он будет изображать живую клетку. Оба файлика положим в папку /res/drawable
Нам нужно знать, что именно отображать в гриде. Для этого нужно создать для грида поставщик данных (Adapter
). Есть стандартные классы для адаптеров (ArrayAdapter
и др.), но нам будет удобнее написать свой, унаследованный от BaseAdapter
. Дабы не плодить файлов (да и не нужен он больше никому), поместим его внутрь класса RunScreen
. А напишем там следующее:
public class LifeAdapter extends BaseAdapter { private Context mContext; private LifeModel mLifeModel; public LifeAdapter(Context context, int cols, int rows, int cells) { mContext = context; mLifeModel = new LifeModel(rows, cols, cells); } public void next() { mLifeModel.next(); } /** * Возвращает количество элементов в GridView */ @Override public int getCount() { return mLifeModel.getCount(); } /** * Возвращает объект, хранящийся под номером position */ @Override public Object getItem(int position) { return mLifeModel.isCellAlive(position); } /** * Возвращает идентификатор элемента, хранящегося в под номером position */ @Override public long getItemId(int position) { return position; } /** * Возвращает элемент управления, который будет выведен под номером position */ @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView view; // выводиться у нас будет картинка if (convertView == null) { view = new ImageView(mContext); // задаем атрибуты view.setLayoutParams(new GridView.LayoutParams(10, 10)); view.setAdjustViewBounds(false); view.setScaleType(ImageView.ScaleType.CENTER_CROP); view.setPadding(1, 1, 1, 1); } else { view = (ImageView)convertView; } // выводим черный квадратик, если клетка пустая, и зеленый, если она жива view.setImageResource(mLifeModel.isCellAlive(position) ? R.drawable.cell : R.drawable.empty); return view; } }
Теперь добавим в класс поля:
private GridView mLifeGrid; private LifeAdapter mAdapter;
onCreate
: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.run); mCloseButton = (Button) findViewById(R.id.CloseButton); mCloseButton.setOnClickListener(this); Bundle extras = getIntent().getExtras(); int cols = extras.getInt(EXT_COLS); int rows = extras.getInt(EXT_ROWS); int cells = extras.getInt(EXT_CELLS);mAdapter = new LifeAdapter(this, cols, rows, cells); mLifeGrid = (GridView)findViewById(R.id.LifeGrid); mLifeGrid.setAdapter(mAdapter); mLifeGrid.setNumColumns(cols); mLifeGrid.setEnabled(false); mLifeGrid.setStretchMode(0);
}
Запускаем и видим:
Отображение последующих поколений
Вот мы и добрались почти до самого конца. Осталось отобразить ход игры. Тут стоит воспользоваться таймером. Таймер будет каждую секунду вызывать обработчик, в котором данные в адаптере будут пересчитываться. Сначала добавим в RunScreen
поле:
private Timer mTimer;
onCreate
- такой код: mTimer = new Timer("LifeTimer"); mTimer.scheduleAtFixedRate(new SendMessageTask(), 0, 500);
SendMessageTask
- это класс-обработчик таймера. Мы определим его прямо в классе RunScreen
следующим образом:
public class SendMessageTask extends TimerTask { /** * @see java.util.TimerTask#run() */ @Override public void run() { Message m = new Message(); RunScreen.this.updateGridHandler.sendMessage(m); } }
В RunScreen
же добавим такую конструкцию:
Handler updateGridHandler = new Handler() { public void handleMessage(Message msg) { mAdapter.next(); mLifeGrid.setAdapter(mAdapter); super.handleMessage(msg); } };
Таким образом, по таймауту мы посылаем нашей же форме сообщение, что пора обновиться, и в только обработчике этого сообщения обновляемся. Спрашивается, почему нельзя передать mLifeGrid
и mAdapter
в класс-обработчик таймера и обновить их там? Ответ - таймер работает в другом потоке, а андроид разрешает модифицировать элементы управления только в том потоке, в котором они были созданы.
Теперь, запустив Life, можно увидеть, например, следующее
Ссылки
Заключение
Итак, мы написали первое приложение для Android, которое уже и не совсем "Hello, World". Лично мне писать для Android понравилось куда больше, чем классические мидлеты. Остался, правда, ряд претензий к Eclipse, но, возможно, это от недостатка опыта.
Спасибо, если кто осилил. Замечания приветствуются.
Знакомство с Android. Часть 3: Использование диалогов
В этой части мы сделаем проверку вводимых параметров по следующим правилам:
- Число столбцов должно быть не меньше 5 и не больше 25.
- Число строк должно быть не меньше 5 и не больше 35.
- Начальное количество клеток должно быть не больше, чем ячеек на поле.
Если какое-то из этих условий не выполняется, будем выводить соответствующее предупреждение
Кроме того, мы добавим кнопку Close, при нажатии на которую приложение будет закрываться, спрашивая вначале согласие пользователя.
Простой диалог
Сначала добавим в классStartScreen.java
следующие константы: // код результата проверки private static final int ALERT_NONE = 0; // параметры введены верно private static final int ALERT_COLUMNS = 1; // некорректное число столбцов private static final int ALERT_ROWS = 2; // некорректное число строк private static final int ALERT_CELLS = 3; // некорректное начальное число клеток // границы допустимых значений числа столбцов private static final int COLUMNS_MIN = 5; private static final int COLUMNS_MAX = 25; // границы допустимых значений числа строк private static final int ROWS_MIN = 5; private static final int ROWS_MAX = 35;
Теперь добавляем метод, осуществляющий проверку введенных параметров:
private int checkInputParameters(int cols, int rows, int cells) { if (cols < COLUMNS_MIN || cols > COLUMNS_MAX) { return ALERT_COLUMNS; } if (rows < ROWS_MIN || rows > ROWS_MAX) { return ALERT_ROWS; } if (cells > rows * cols) { return ALERT_CELLS; } return ALERT_NONE; }
Метод onClick
теперь должен работать немного по-другому: сначала проверять введенные параметры, и, если проверка прошла (ALERT_NONE
), открывать окно RunScreen
, иначе же показывать предупреждение. Итак, onClick
будет выглядеть так:
public void onClick(View v) { EditText rowsEditor = (EditText)findViewById(R.id.RowsEditor); EditText colsEditor = (EditText)findViewById(R.id.ColumnsEditor); EditText cellsEditor = (EditText)findViewById(R.id.CellsEditor); int cols = Integer.parseInt(colsEditor.getText().toString()); int rows = Integer.parseInt(rowsEditor.getText().toString()); int cells = Integer.parseInt(cellsEditor.getText().toString());int alertCode = checkInputParameters(cols, rows, cells); if (alertCode != ALERT_NONE) { showDialog(alertCode); return; }
Intent intent = new Intent(); intent.setClass(this, RunScreen.class); intent.putExtra(RunScreen.EXT_COLS, cols); intent.putExtra(RunScreen.EXT_ROWS, rows); intent.putExtra(RunScreen.EXT_CELLS, cells); startActivity(intent); finish(); }
Метод showDialog(id)
класса Activity
пытается открыть диалог. При этом вызывается метод onCreateDialog
, возвращающий объект класса Dialog
. Так что нужно перекрыть метод onCreateDialog
и сконструировать тот диалог, который нам нужен. Ну у нас тут всё просто, диалоги будут отличаться только выводимым сообщением, так что можно сделать следующее:
@Override protected Dialog onCreateDialog(int id) { DialogInterface.OnClickListener doNothing = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } }; int alertMessage; switch (id) { case ALERT_COLUMNS: alertMessage = R.string.alert_columns; break; case ALERT_ROWS: alertMessage = R.string.alert_rows; break; case ALERT_CELLS: alertMessage = R.string.alert_cells; break; default: return null; } return new AlertDialog.Builder(this) .setMessage(alertMessage) .setNeutralButton(R.string.ok, doNothing) .create(); }
В strings.xml
при этом нужно добавить следующие значения:
<string name="alert_columns">Incorrect columns number: should be from 5 to 25</string> <string name="alert_rows">Incorrect rows number: should be from 5 to 35</string> <string name="alert_cells">Number of cells is greater then the size of grid</string> <string name="ok">OK</string>
Итак, в методе onCreateDialog
мы решили, какое сообщение (alertMessage
) будем выводить, создали диалог с помощью AlertDialog.Builder
, вывели туда сообщение, поставили единственную кнопку OK
и привязали к ней обработчик doNothing
, который ничего не делает (нам, в принципе, делать ничего и не надо). Аналогичным образом можно добавить иконку формы, добавить ещё кнопок и т.д.
Подробнее про то, как строятся диалоги, можно посмотреть в адроидовских сэмплах - там на самом деле все достаточно понятно и просто.
Теперь при вводе некорректных данных мы видим вот это:
Диалог для закрытия приложения
Добавим на формуRunScreen
кнопку Close. Для этого напишем такую разметку в run.xml
: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/Message" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingBottom="10dip" /> <Button android:id="@+id/CloseButton" android:text="@string/close" android:textStyle="bold" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
В strings.xml
добавим следующие значения:
<string name="yes">yes</string> <string name="no">no</string> <string name="close">Close</string> <string name="submit_close">Are you sure you want to close this wonderful application?</string>
Теперь вносим изменения в класс RunScreen
:
public class RunScreen extends Activity implements OnClickListener {private static final int ALERT_CLOSE = 1; public static final String EXT_COLS = "cols"; public static final String EXT_ROWS = "rows"; public static final String EXT_CELLS = "cells";
Button mCloseButton;
/** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.run);mCloseButton = (Button) findViewById(R.id.CloseButton); mCloseButton.setOnClickListener(this);
Bundle extras = getIntent().getExtras(); int cols = extras.getInt(EXT_COLS); int rows = extras.getInt(EXT_ROWS); int cells = extras.getInt(EXT_CELLS); TextView message = (TextView)findViewById(R.id.Message); message.setText("Rows: " + rows + "\nColumns: " + cols + "\nCells: " + cells); }/* * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View arg0) { showDialog(ALERT_CLOSE); }
@Override protected Dialog onCreateDialog(int id) { switch (id) { case ALERT_CLOSE: return new AlertDialog.Builder(this) .setMessage(R.string.submit_close) // кнопка "Yes", при нажатии на которую приложение закроется .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { finish(); } }) // кнопка "No", при нажатии на которую ничего не произойдет .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } }) .create(); default: break; } return null; }
}
Объяснять тут особо нечего, и так все понятно. Теперь, при нажатии на кнопку Close, мы видим следующее:
При нажатии на yes приложение закроется, на no - продолжит работу.