background preloader

Android

Facebook Twitter

ArticleS.UncleBob.SingletonVsJustCreateOne. Singleton vs. Just Create One The Singleton pattern is elegant and natural. It's easy to see why it's become so popular. In this article I'd like to convince you to avoid making a habit of using it. The cannonical form of the Singleton pattern is: public class Singleton{ private Singleton() {} private static Singleton instance = null; public static Siggleton intance() { if (instance == null) instance = new Singleton(); return instance; }} This is so easy to understand, and so compelling in it's simplicity and convenience, that it has become one of the most popular of all the GOF design patterns. But is Singleton the best way to achieve this? Principles, however, are not laws. Public class Singleton{ private Singleton() {} private static Singleton instance = new Singleton(); public static Singleton instance() {return instance;}} Clearly SIS is superior to the cannonical case in just about every way. I can improve upon the SIS pattern, however.

But... eeeewwwwww!! Append comments below: SwipeRefreshLayout with ListView done right. Setting up a SwipeRefreshLayout is pretty easy. There are great tutorials out there. Even more if you already played around with other compat components like the DrawerLayout. You just wrap your ScrollView or ListView, a few wiring here and there, and it's done. Works flawlessly, with just a few lines of code. But what if you want to use a ListView, but you need something else besides a ListView as SwipeRefreshLayout's only child?

Maybe you want to use an empty view for all those times the list comes up empty. Or you want to put any extra view, like a SmoothProgressBar anywhere. Image a layout like this one. If you use this as-is, everytime you scroll up in that view, the SwipeRefreshLayout fires and updates, making your app unable to scroll up in a list. The trick here is to wire the OnScrollListener from the ListView manually. With this little snippet now it works perfectly. Happy coding! Текст с разметкой в android.widget.TextView. Недавно мне понадобилось сделать довольно хитроумный чат в приложении под Android. Помимо собственно информации требовалось передавать пользователям дополнительную функциональность в контексте определенного сообщения: имя автора сообщения по нажатию на него должно вставляться в текстовое поле ответа, а если это сообщение о только что созданном игровом сеансе, пользователи должны иметь возможность присоединиться к игре по клику и так далее.

Одним из главных требований была возможность создавать сообщение, содержащее несколько ссылок, что и задало направление исследований.WebView, обладая нужной функциональностью, был отвергнут по причине тяжести решения: я даже не стал создавать 100 или сколько-нибудь там экземпляров в тестовых целях, по одному на каждое сообщение, поскольку сразу было понятно, что это расточительство нормально работать не будет. Задачи Содержимое страниц берётся из строк в ресурсах приложения, а изображения являются drawable-ресурсами. Создание приложения ArticleSpan.java.

Тайны кнопок в Android. Часть 1: Основы верстки. Приветствую, уважаемое сообщество. В своем цикле статей по разработке Android-приложений я хочу поделиться с вами интересными и полезными приемами верстки сложных элементов управления. Мы рассмотрим как базовые приемы верстки, так и продвинутые способы ее оптимизации, которые существенно облегчают развитие и сопровождение Android-приложений, экономят время и деньги.

Первая часть предназначена для начинающих разработчиков. Я покажу, как сделать достаточно сложную кнопку исключительно версткой, не применяя Java-кода, ни тем более собственных компонентов. Знание этих приемов верстки пригодится и при работе с другими компонентами Android. По ходу статьи я буду подробно пояснять, что означают те или иные константы, атрибуты, команды и тому подобное. Что мы хотим сделать в данной статье? Выглядеть это будет примерно так: По левому краю кнопки располагаем иконку. Делать все это будем только версткой.

Создаем каркас приложения Приступим к реализации. Next. Next. Next. Finish. Простейшая кнопка. Транзакции фрагментов и потеря состояния активности. Для тех, кто не сталкивался с этой проблемой, поясню на примере — в конце длительной фоновой операции вы показываете диалог (да Google не рекомендует так делать, но заказчик требует). Если до показа диалога вы свернете приложение нажав клавишу Home, то во время показа диалога произойдет исключение IllegalStateException. То же самое произойдет в случае показа диалога ожидания и скрытия его по завершению фоновой активности — вызов метода dismiss() после сохранения состояния вызовет исключение. Лучшая статья на эту тему, которую я нашел погуглив проблему это Fragment Transactions & Activity State Loss. Статья объясняет проблему, но дает только общие советы, сама проблема остается нерешенной. Возможно кому-то из хабражителей будет интересно сделать перевод статьи, а пока расскажу вкратце ее смысл.

Способов бороться с этой проблемой масса, все они сводятся к тому чтобы отложить транзакцию на момент после восстановления, а именно в функциях Activity.onPostResume или Fragment.onResume. Используем стандартные элементы ListFragment по назначению. В одном из проектов столкнулся с тем, что в приложении нужно было отображать списки результатов для различных запросов (поиск по словам, датам, тегам и т.п.). Так как списки повторялись в разных Activity, самым очевидным решением было использовать фрагменты, а конкретно создать свой класс ListFragment и повторно использовать его в проекте. ListFragment как раз предназначен для отображения различных списков и примечателен тем, что имеет свои поля и методы для работы со списком, а также XML-разметку с минимальным набором представлений.

Благодаря всему этому, мы можем даже не создавать свою XML-разметку для фрагмента, используя стандартную. Прежде, чем начать работать с ListFragment, давайте немного изучим, что же находится внутри? По умолчанию используется разметка из ~\sdk\platforms\android-XX\data\res\layout\list-content.xml У некоторых представлений этой разметки имеются идентификаторы, благодаря которым мы можем кастомизировать родительский контейнер, список и текст пустого списка. Google: рекомендации для приложений в Google Play / Блог компании Google. Тема приложений является одной из самых обсуждаемых и «трендовых», а тема фичиринга и успешности приложения в том или ином сторе — самая обсуждаемая в ней подтема.

На днях было опубликовано руководство The Secrets to App Success on Google Play, которое, если переводить практически дословно, поможет вашему приложению или игре стать успешными в Google Play (кстати, скачать книгу можно из Google Play). Кто-то подумает, что это, конечно, здорово, но вряд ли станет волшебной палочкой-выручалочкой для приложения. Определенно в руководстве есть советы, которые могут быть интересны и полезны начинающим разработчикам, пишущим не только под Android, но и под iOS, Windows или для магазина Amazon и т.п. Разработчики, которые уже не первый год в индустрии, смогут найти для себя рекомендации, применительные именно к Google Play. Зачем публиковать приложение в Google Play?

Каждый разработчик сам для себя выбирает в какие сторы и в какие сроки публиковать приложение. Material Design Appurify. FAQ по программированию под Android от новичка, и для новичков. Вчера в 14:28 Предисловие к FAQ. Программирование является моим хобби уже давно (правда на других языках и платформах), но до андроида руки дотянулись совсем недавно. Прошло несколько этапов, прежде чем я добрался до написания программ. Сначала была пара месяцев посвященных Java, на сайте с «Сгибателем». Надеюсь, что приведенные примеры окажутся полезными. Как явно программно закрыть приложение при нажатии по кнопке: finish(); Выход с большей вероятностью (api 15+) Intent intent = new Intent(Activity.this, Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); finish(); Либо прописываем в AndroidManifest.xml — android:noHistory=«true» Данные настройки позволяют избежать гуляния по предыдущим активностям вместо выхода.

Конвертация string to float Как использовать мелодии и вибрацию: Пример кода: Что бы звук не был тихим: stackoverflow.com/questions/8278939/android-mediaplayer-volume-is-very-low-already-adjusted-volume Сам код: Выбор рингтона через диалог: List Views - Android for the Busy Developer Tuts+ Course. Об открытости данных в Android-приложениях / Блог компании EastBanc Technologies. Немного информации о том, какие данные в вашем приложении могут быть доступны для других программ и какие меры можно предпринять, чтобы это предотвратить. Компоненты Архитектуру Android-приложения можно представить в виде набора компонент (activities, services и пр.) и связей между ними.

Android API предоставляет несколько стандартных способов общения между компонентами приложения: старт активити/сервис через контекст, отправка сообщений-интентов, использование ServiceConnection или ContentProvider’а и другое. Обо всём этом можно почитать в любом туториале о передаче данных в Android. Однако, есть один нюанс, о котором, как правило, умалчивается. Activity Для запуска одной из своих активити вы, наверняка, используете специально подготовленный intent: Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class); startActivity(myIntent); Вы также можете попробовать запустить чужую активити, зная ее package name и class name: Результат — запущенная активити.

Service ContentProvider. Модификация Android приложения от новичка и для новичков. Добрый день! Хочу поделиться с вами историей как я модифицировал одно из системных приложений Adroid'а, точнее его модификации LeWa OS. С Андроидом я познакомился недавно, всего месяц назад, и постараюсь тут описать весь ход своих мыслей, что несомненно будет полезно всем тем кто хочет улучшить Андроид, но не знает с чего начать.

Пост постараюсь сделать подробным, а потому длинным. Для начало немного истории. Как только я получил свой первый китайфон, решил попробовать разные прошивки и в результате остановился на Lewa. Информации о данной проблеме немного, поэтому начал копать сам. Набор инструментов Первое что нам надо — научиться распаковывать программы. Приступим Итак, первое что нам надо это разобрать наше приложение, для этого все apk надо скопировать в папку с apktools. Изучаем код Первое что нам необходимо понять — что и где править. Contact_list_content.xml Там меня заинтересовала строчка . Alphabet_fast_indexer.xml AlphabetFastIndexer.smali Декомпилированный AlphabetFastIndexer.smali.

Интеграция дизайна мобильных приложений. Часть 1: Android. Этот доклад я прочитал на Dribbble Meetup 2013, который прошел в Москве в День космонавтики. В нём описан мой процесс интеграции дизайна — то есть в каком виде передавать приложение от дизайнера к разработчику мобильных приложений. Выбор интсрументов, которые я использую в работе, и сам процесс сформировались опытным путём, методом проб и ошибок. Надеюсь, он поможет сохранить вам немного времени и избавит хотя бы от части рутинной работы. Так как презентация содержит достаточно большое количество слайдов, я решил разбить материал на две части.

Первая часть — интеграция дизайна под платформу Android. Вторая — под iOS и Windows Phone, а также упомяну про Samsung Bada. Дальше — много картинок. Проблематика А начну я свой рассказ с момента, когда мы уже нарисовали макеты нашего приложения. Мы отдаем макеты в разработку, а на выходе получаем ЭТО. Почему?! Специфкация дизайна (ТЗ) Итак, под спецификацией дизайна я понимаю набор файлов, которые дизайнер передает программистам. Android Metrics Fonts. Изучаем принципы взаимодействия Ubuntu Touch и Android. Привет, хабр. Пару месяцев назад я занимался портированием Ubuntu Touch на платформу Allwinner A10 , в процессе делал заметки себе на память.

Сейчас, на мой взгляд, они всё ещё актуальны, пока Ubuntu Touch окончательно не переехала на свой графический сервер Mir и так далее. Данная статья поможет заинтересованным лицам найти стартовую точку, с которой можно начать близкое знакомство с UT. Стиль изложения далёк от технического, но если вы не против, то приглашаю под кат. Введение Что такое libhybris libhybris — прослойка, позволяющая подгружать в Glibc userspace библиотеки из Bionic userspace, на лету заменяя некоторые символы вариантами из Glibc.

Что такое surfaceflinger surfaceflinger — нативный сервис андроида, композитный менеджер графических слоёв. Более подробно про Binder IPC и SurfaceFlinger : Ubuntu Touch Ubuntu Touch Developer Preview сама по себе основана на Android, заимствует необходимые сервисы для работы с железом. Компоненты Ubuntu Touch Ubuntu Platform API Примеры методов: QtUbuntu. Работа с cURL на android. Зачем это нужно Мы хотим общение с API сервером написать на C++, а дальше использовать написанную библиотеку во всех наших приложения под различными платформами. Конечно мы хотим, чтобы работало под android.

Libcurl — это библиотека интерфейса API для передачи, которую разработчики могут встроить в свои программы; cURL действует как автономная обёртка для библиотеки libcurl. libcurl используется, чтобы обеспечить возможность передачи файлов (адресуемых с помощью URL) многочисленным приложениям (как открытым, так и коммерческим). (wikipedia) Для iOS можно скачать готовый пример подключения и использования cURL с сайта разработчика. Под android мне на просторах google не удалось найти ни одного исходника, где бы производилось успешное обращение к этой кросс-платформенной библиотеке.

И вообще говоря под android заставить работать cURL оказалось немного сложнее чем хотелось бы. Что нам понадобится: Получение библиотеки cURL для android Есть про портирование cURL под android и на хабре. Дальше. За кулисами Android: что-то, чего вы можете не знать. 0. Оглавление 1. Предисловие2. Хак eMMC памяти HTC Desire HD с целью изменения идентификационной информации телефона3. 1. Мобильные гаджеты стали неотъемлемой частью нашей повседневной жизни, мы доверяем им свои самые сокровенные тайны, а утрата такого устройства может привести к серьезным последствиям. 2.

Как нам известно, eMMC память устройства разделена на блоки, каждый из которых несет в себе определенную информацию, вот так выглядит примерное древо блоков памяти смартфона HTC Desire HD Нас интересует содержимое /dev/block/mmcblk0p7 и как назло именно туда нам обычный S-OFF хак лезть не разрешает. Продукт состоял из USB-ридера смарт-карт и самой смарткарты формата sim. Из дампов была восстановлена последовательность действий, которая представляла собой команды shell, также, в устройство закачивались некие файлы.

Но среди них была и собственно утилита, которая используя уникальный ключ, сгенерированный ядром по таймстэмпу, снимала защиту от записи. Телефон просто перезагружается. 3. Android CPU governors explained. Android CPU governors explained 1: OnDemand 2: OndemandX 3: Performance 4: Powersave 5: Conservative 6: Userspace 7: Min Max 8: Interactive 9: InteractiveX 10: Smartass 11: SmartassV2 12: Scary 13: Lagfree 14: Smoothass 15: Brazilianwax 16: SavagedZen 17: Lazy 18: Lionheart 19: LionheartX 20: Intellidemand 21: Hotplug 1: OnDemand Governor: This governor has a hair trigger for boosting clockspeed to the maximum speed set by the user. If the CPU load placed by the user abates, the OnDemand governor will slowly step back down through the kernel's frequency steppings until it settles at the lowest possible frequency, or the user executes another task to demand a ramp.

OnDemand has excellent interface fluidity because of its high-frequency bias, but it can also have a relatively negative effect on battery life versus other governors. This final fact is important to know before you read about the Interactive governor: OnDemand scales its clockspeed in a work queue context. Слой радиоинтерфейса в ОС Android. Основы безопасности операционной системы Android. Native user space, ч.2. Разработка мобильных приложений: с чего начать / Блог компании Mail.Ru Group. Ресурсы, о которых должен знать каждый Android-разработчик. Как я писал Bomberman’а на Android. Используем компонент из стандартного Android-приложения в своем проекте. Browse our Course Catalog - University Consortium.

Mobile Courses - University Consortium.