Статья объясняет, как реализовать систему предоплаченных платежей с использованием NFC (Near Field Communication) и меток NDEF (NFC Data Exchange Format) на устройствах Android. • Рассматриваются основы технологии NFC, структура сообщений NDEF и процесс чтения/записи данных на NFC-метки. • Автор предоставляет пошаговое руководство по созданию простой системы предоплаченных платежей, где NFC-метки выступают в роли "кошельков".
Ключевые компоненты:
NFC-адаптер: используется для взаимодействия с NFC-оборудованием.
PendingIntent: для обработки NFC-интентов в фоновом режиме.
IntentFilter: для фильтрации интентов, связанных с NFC.
NdefMessage и NdefRecord: для структурирования данных на NFC-метках.
Преимущества для Android-разработчиков:
Интеграция NFC: статья предоставляет практический пример интеграции технологии NFC в Android-приложения, что становится все более важным для бесконтактных взаимодействий.
Реальное применение: система предоплаченных платежей является наглядным примером использования технологии NFC в реальной жизни.
Понимание NDEF: разработчики могут узнать больше о работе с сообщениями и записями NDEF — основой обмена данными через NFC.
Безопасность: статья рассматривает аспекты безопасности NFC-транзакций, что важно для разработчиков, работающих с конфиденциальными данными.
Примеры кода: предоставленные фрагменты кода служат отправной точкой для реализации аналогичных функций.
Использование Android API: статья демонстрирует работу с различными Android API для NFC, помогая разработчикам освоить эти инструменты.
Пользовательский опыт: обсуждается создание удобного пользовательского интерфейса для работы с NFC, что важно для создания комфортных приложений.
https://proandroiddev.com/nfc-on-android-creating-a-prepaid-payment-system-using-ndef-tags-8105e46340b4
Ключевые компоненты:
NFC-адаптер: используется для взаимодействия с NFC-оборудованием.
PendingIntent: для обработки NFC-интентов в фоновом режиме.
IntentFilter: для фильтрации интентов, связанных с NFC.
NdefMessage и NdefRecord: для структурирования данных на NFC-метках.
Преимущества для Android-разработчиков:
Интеграция NFC: статья предоставляет практический пример интеграции технологии NFC в Android-приложения, что становится все более важным для бесконтактных взаимодействий.
Реальное применение: система предоплаченных платежей является наглядным примером использования технологии NFC в реальной жизни.
Понимание NDEF: разработчики могут узнать больше о работе с сообщениями и записями NDEF — основой обмена данными через NFC.
Безопасность: статья рассматривает аспекты безопасности NFC-транзакций, что важно для разработчиков, работающих с конфиденциальными данными.
Примеры кода: предоставленные фрагменты кода служат отправной точкой для реализации аналогичных функций.
Использование Android API: статья демонстрирует работу с различными Android API для NFC, помогая разработчикам освоить эти инструменты.
Пользовательский опыт: обсуждается создание удобного пользовательского интерфейса для работы с NFC, что важно для создания комфортных приложений.
https://proandroiddev.com/nfc-on-android-creating-a-prepaid-payment-system-using-ndef-tags-8105e46340b4
Demystifying Maestro’s UI Testing Implementation
Что такое Maestro?
Фреймворк для UI-тестирования Android, iOS и веб-приложений.
Использует YAML для описания команд.
Maestro Studio: веб-инструмент для генерации YAML-файлов, отображения дерева UI и запуска тестов.
Как работает Maestro?
Установка APK: CLI устанавливает собственные APK (test APK + инструментальный APK).
GRPC-сервер:
Запускается внутри инструментального APK через adb instrument.
Используется для взаимодействия между CLI и устройством.
UiAutomator:
Считывает иерархию UI (в формате XML).
Выполняет команды взаимодействия.
ADB: CLI также использует команды ADB для управления устройством.
Ожидание событий: CLI делает регулярные скриншоты, сравнивает их и отслеживает изменения экрана.
Что такое Maestro?
Фреймворк для UI-тестирования Android, iOS и веб-приложений.
Использует YAML для описания команд.
Maestro Studio: веб-инструмент для генерации YAML-файлов, отображения дерева UI и запуска тестов.
Как работает Maestro?
Установка APK: CLI устанавливает собственные APK (test APK + инструментальный APK).
GRPC-сервер:
Запускается внутри инструментального APK через adb instrument.
Используется для взаимодействия между CLI и устройством.
UiAutomator:
Считывает иерархию UI (в формате XML).
Выполняет команды взаимодействия.
ADB: CLI также использует команды ADB для управления устройством.
Ожидание событий: CLI делает регулярные скриншоты, сравнивает их и отслеживает изменения экрана.
https://android-developers.googleblog.com/2025/01/orientation-and-resizability-changes-in-android-16.html?m=1&s=31
Будет больно
(c) Черновик канала @droidgr
Будет больно
(c) Черновик канала @droidgr
Android Developers Blog
The future is adaptive: Changes to orientation and resizability APIs in Android 16
Build adaptive apps that support various screen sizes and orientations, promoting consistent user experiences across different Android devices.
Разбираем использование runBlocking в Android:
👉 Что такое runBlocking?
Функция, которая запускает новую корутину и блокирует текущий поток до её завершения.
Часто используется в примерах для демонстрации корутин в main() функции.
👉 Почему стоит быть осторожным с runBlocking в Android?
Блокирует текущий поток, что на Android может привести к замораживанию UI и возникновению ANR (Application Not Responding).
Особенно критично при выполнении операций ввода-вывода в главном потоке.
👉 Пример неправильного использования:
´´´
class MainViewModel(private val mainRepository: MainRepository) : ViewModel() {
// Не рекомендуется
private fun fetchPosters() = runBlocking {
mainRepository.fetchPosters()
}
}
´´
В этом примере runBlocking блокирует главный поток, что может привести к проблемам с отзывчивостью приложения.
👉 Рекомендуемые альтернативы:
Используйте viewModelScope для запуска корутин, что обеспечивает автоматическую отмену задач при уничтожении ViewModel.
Применяйте launch или async для асинхронных операций без блокировки главного потока.
(c) Черновик канала @droidgr
👉 Что такое runBlocking?
Функция, которая запускает новую корутину и блокирует текущий поток до её завершения.
Часто используется в примерах для демонстрации корутин в main() функции.
👉 Почему стоит быть осторожным с runBlocking в Android?
Блокирует текущий поток, что на Android может привести к замораживанию UI и возникновению ANR (Application Not Responding).
Особенно критично при выполнении операций ввода-вывода в главном потоке.
👉 Пример неправильного использования:
´´´
class MainViewModel(private val mainRepository: MainRepository) : ViewModel() {
// Не рекомендуется
private fun fetchPosters() = runBlocking {
mainRepository.fetchPosters()
}
}
´´
В этом примере runBlocking блокирует главный поток, что может привести к проблемам с отзывчивостью приложения.
👉 Рекомендуемые альтернативы:
Используйте viewModelScope для запуска корутин, что обеспечивает автоматическую отмену задач при уничтожении ViewModel.
Применяйте launch или async для асинхронных операций без блокировки главного потока.
(c) Черновик канала @droidgr
getstream.io
Exercise Caution When Using runBlocking on Android
Explore the internal mechanism of runBlocking and the reasons why you exercise caution when using runBlocking.
Разбираем библиотеку Immutable Collections в Kotlin:
👉 Почему стандартные коллекции Kotlin не всегда безопасны?
Стандартные коллекции (List, Set, Map) по умолчанию изменяемы, что может привести к непреднамеренным изменениям данных.
Даже коллекции, созданные с помощью listOf(), setOf(), mapOf(), являются только "только для чтения", но не по-настоящему неизменяемыми.
👉 Что предлагает библиотека Immutable Collections?
Предоставляет действительно неизменяемые коллекции, которые предотвращают случайные изменения и повышают безопасность в многопоточных средах.
Использует структурное разделение для оптимизации производительности и предотвращения ненужного копирования данных.
👉 Как начать использовать?
Добавьте зависимость в build.gradle.kts:
Создание неизменяемых коллекций:
Оригинальные immutableList и immutableMap остаются без изменений.
👉 Преимущества в Jetpack Compose:
Избежание ненужных рекомпозиций: Неизменяемые коллекции помогают Compose отслеживать изменения состояния и предотвращают избыточные обновления UI.
Стабильность состояния: Благодаря структурному разделению, изменения создают новые объекты, сохраняя неизменность предыдущих версий, что улучшает производительность.
Предсказуемое поведение UI: Исключение случайных мутаций данных обеспечивает более надежную работу интерфейса.
Подробнее о библиотеке Immutable Collections и её использовании читайте в статье:
#Kotlin #ImmutableCollections #JetpackCompose #AndroidDevelopment
(c) Черновик канала @droidgr
👉 Почему стандартные коллекции Kotlin не всегда безопасны?
Стандартные коллекции (List, Set, Map) по умолчанию изменяемы, что может привести к непреднамеренным изменениям данных.
Даже коллекции, созданные с помощью listOf(), setOf(), mapOf(), являются только "только для чтения", но не по-настоящему неизменяемыми.
👉 Что предлагает библиотека Immutable Collections?
Предоставляет действительно неизменяемые коллекции, которые предотвращают случайные изменения и повышают безопасность в многопоточных средах.
Использует структурное разделение для оптимизации производительности и предотвращения ненужного копирования данных.
👉 Как начать использовать?
Добавьте зависимость в build.gradle.kts:
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.5")
}
Создание неизменяемых коллекций:
import kotlinx.collections.immutable.*
val immutableList = persistentListOf("A", "B", "C")
val immutableSet = persistentSetOf(1, 2, 3)
val immutableMap = persistentMapOf("key1" to 100, "key2" to 200)
Добавление и удаление элементов:
kotlin
Копировать
Редактировать
val newList = immutableList.add("D") // Создает новый список
println(newList) // Вывод: [A, B, C, D]
val newMap = immutableMap.put("key3", 300)
println(newMap) // Вывод: {key1=100, key2=200, key3=300}
Оригинальные immutableList и immutableMap остаются без изменений.
👉 Преимущества в Jetpack Compose:
Избежание ненужных рекомпозиций: Неизменяемые коллекции помогают Compose отслеживать изменения состояния и предотвращают избыточные обновления UI.
Стабильность состояния: Благодаря структурному разделению, изменения создают новые объекты, сохраняя неизменность предыдущих версий, что улучшает производительность.
Предсказуемое поведение UI: Исключение случайных мутаций данных обеспечивает более надежную работу интерфейса.
Подробнее о библиотеке Immutable Collections и её использовании читайте в статье:
#Kotlin #ImmutableCollections #JetpackCompose #AndroidDevelopment
(c) Черновик канала @droidgr
Carrion.dev
Exploring Kotlin’s Immutable Collections Library
Exploring Kotlin’s Immutable Collections Library, use it in Compose to improve performance.
Разбираем, что происходит при нажатии кнопки "Старт" в Android Studio:
👉 Шаг 1: Сборка приложения
Команда: ./gradlew assembleDebug
Описание: Компилирует код и генерирует APK-файл в директории app/build/outputs/apk/debug/.
👉 Шаг 2: Запуск эмулятора
Команды:
emulator -list-avds
emulator -avd <имя_эмулятора>
Описание: Первая команда отображает список доступных виртуальных устройств, вторая запускает выбранный эмулятор.
👉 Шаг 3: Установка APK на устройство
Команда: adb install -r app/build/outputs/apk/debug/app-debug.apk
Описание: Устанавливает или переустанавливает APK на подключенное устройство или эмулятор.
👉 Шаг 4: Запуск приложения
Команда: adb shell am start -n <package_name>/<activity_name>
Описание: Запускает указанную Activity приложения на устройстве.
Эти команды позволяют управлять процессом сборки и запуска приложения напрямую из терминала, что особенно полезно для разработчиков, предпочитающих минималистичные среды разработки.
Подробнее о процессе читайте в статье:
#AndroidStudio #CommandLine #AndroidDevelopment
(c) Черновик канала @droidgr
👉 Шаг 1: Сборка приложения
Команда: ./gradlew assembleDebug
Описание: Компилирует код и генерирует APK-файл в директории app/build/outputs/apk/debug/.
👉 Шаг 2: Запуск эмулятора
Команды:
emulator -list-avds
emulator -avd <имя_эмулятора>
Описание: Первая команда отображает список доступных виртуальных устройств, вторая запускает выбранный эмулятор.
👉 Шаг 3: Установка APK на устройство
Команда: adb install -r app/build/outputs/apk/debug/app-debug.apk
Описание: Устанавливает или переустанавливает APK на подключенное устройство или эмулятор.
👉 Шаг 4: Запуск приложения
Команда: adb shell am start -n <package_name>/<activity_name>
Описание: Запускает указанную Activity приложения на устройстве.
Эти команды позволяют управлять процессом сборки и запуска приложения напрямую из терминала, что особенно полезно для разработчиков, предпочитающих минималистичные среды разработки.
Подробнее о процессе читайте в статье:
#AndroidStudio #CommandLine #AndroidDevelopment
(c) Черновик канала @droidgr
Medium
Behind the Scenes: What Happens When You Press the Start button in Android Studio?
As Android developers, we frequently rely on Android Studio’s “Run” or “Start” button to build, deploy, and launch our applications on…
Сделал небольшое саммари по AI для Android:
https://www.linkedin.com/feed/update/urn:li:activity:7379572553406730240/
https://www.linkedin.com/feed/update/urn:li:activity:7379572553406730240/
Linkedin
GitHub - mobile-next/mobile-mcp: Model Context Protocol Server for Mobile Automation and Scraping (iOS, Android, Emulators, Simulators…
AI for Android development. Here's what you need to know:
- Your dependency injection framework can now help you write the perfect prompt to solve crashes. Koin, a popular service locator for Kotlin, has introduced a new feature in its Kotzilla platform…
- Your dependency injection framework can now help you write the perfect prompt to solve crashes. Koin, a popular service locator for Kotlin, has introduced a new feature in its Kotzilla platform…
Ну что ж, настало время попробовать сделать что-то в формате build in public. Обычно у меня в фоне есть проекты, которые я пилю сам, с помощью джунов или AI.
В этот раз идея простая: жена попросила сделать нормальный виджет погоды с UV-индексом на день. Оказалось, что таких приложений на удивление мало, хотя, казалось бы, программ с погодой тьма.
Я слишком ленив, чтобы писать всё с нуля, поэтому попробую сделать это одним махом. План следующий:
👉 Взять обычный шаблон.
👉 Сгенерировать основу через Kiro.
👉 Сделать ревью кода.
👉 Докрутить с помощью Claude и руками.
Из плохих новостей: мой старый аккаунт разработчика снесли за то, что я забыл пройти верификацию в мае. Придётся создавать новый, чистый.
#weather_app
В этот раз идея простая: жена попросила сделать нормальный виджет погоды с UV-индексом на день. Оказалось, что таких приложений на удивление мало, хотя, казалось бы, программ с погодой тьма.
Я слишком ленив, чтобы писать всё с нуля, поэтому попробую сделать это одним махом. План следующий:
👉 Взять обычный шаблон.
👉 Сгенерировать основу через Kiro.
👉 Сделать ревью кода.
👉 Докрутить с помощью Claude и руками.
Из плохих новостей: мой старый аккаунт разработчика снесли за то, что я забыл пройти верификацию в мае. Придётся создавать новый, чистый.
#weather_app
😁2👍1
Антоха Разраб c AI
Ну что ж, настало время попробовать сделать что-то в формате build in public. Обычно у меня в фоне есть проекты, которые я пилю сам, с помощью джунов или AI. В этот раз идея простая: жена попросила сделать нормальный виджет погоды с UV-индексом на день. Оказалось…
Продолжаем #build_in_public. Немного технических деталей по будущему виджету
Откуда будем брать данные о погоде?
Open-Meteo (open-meteo.com). Это открытое и бесплатное API, что идеально подходит, пока проект некоммерческий. Никаких ключей и сложной регистрации.
Как будем определять локацию?
Тут всё просто:
📍 Автоматически определять ваше местоположение, чтобы сразу показать актуальный прогноз, стянув с gps
🗺 Если захочется посмотреть погоду в другом городе, можно будет выбрать точку вручную на карте. Для этого интегрируем OSM
Держим курс на простоту и функциональность!
#weather_app
Откуда будем брать данные о погоде?
Open-Meteo (open-meteo.com). Это открытое и бесплатное API, что идеально подходит, пока проект некоммерческий. Никаких ключей и сложной регистрации.
Как будем определять локацию?
Тут всё просто:
📍 Автоматически определять ваше местоположение, чтобы сразу показать актуальный прогноз, стянув с gps
🗺 Если захочется посмотреть погоду в другом городе, можно будет выбрать точку вручную на карте. Для этого интегрируем OSM
Держим курс на простоту и функциональность!
#weather_app
👍1
Антоха Разраб c AI
Ну что ж, настало время попробовать сделать что-то в формате build in public. Обычно у меня в фоне есть проекты, которые я пилю сам, с помощью джунов или AI. В этот раз идея простая: жена попросила сделать нормальный виджет погоды с UV-индексом на день. Оказалось…
Задумался, как мне из координат указанных пользователем вытащить ближайший город. Думал, может Places API или что еще - а нет, все проще. В Android есть Geocoder API, которое делает ровно сказанное выше и достаточно неплохо.
🔥3
Не с первого раза, да и на старом добром xml, вместо модного glance, но заставил вчера вечером Claude Code догенерировать мне черновик 3 виджетов.
Если бы не подписка, потратил бы баксов 30 на 3 виджета с обновлением данных. Норм?
#weather_app
Если бы не подписка, потратил бы баксов 30 на 3 виджета с обновлением данных. Норм?
#weather_app
🔥4❤2💅2
Внутрянка пока что только так. Бесплатная OSM и геокодер о котором писал выше.
Мне подсветили что Geocoder апи может крашится в зависимости от вендоров, так что надо сразу firebase crashlytic прикручивать и искать замену
#weather_app
Мне подсветили что Geocoder апи может крашится в зависимости от вендоров, так что надо сразу firebase crashlytic прикручивать и искать замену
#weather_app
🔥4