🧹Hamma uchun tarixni tozalash
– Android uchun Telegram’ning beta-versiyasida endi siz nafaqat o‘zingiz, balki barcha ishtirokchilar uchun guruh suhbati tarixini tozalashingiz mumkin.
Xabarlarni hamma uchun tozalash imkoniyati faqat guruh egasi uchun mavjud. Eslatma: biz xozirda chat tarixini tozalash uchun turli botlardan foydalanamiz.
Ushbu imkoniyat faqat superguruhlarda ishlaydi va tez kunda Telegramga qo'shilishi kutilmoqda.
#Android#beta
💚@TGraphUz | YouTube
🚀Google взялась за упрощение Picture‑in‑Picture
PiP на Android долго был зоопарком: разный API на версиях, разный UI‑стейт, много if (SDK_INT…) и бойлерплейта. Новая Jetpack‑библиотека androidx.core:core-pip как раз и создана, чтобы это спрятать: она выравнивает вызовы PiP между версиями Android, даёт единый способ задавать параметры (особенно для видео/плееров), объединяет разрозненные колбэки состояния PiP и уменьшает количество кода за счёт готовых пресетов действий для типовых сценариев.
Требования: обновляем Activity
Чтобы всё это заработало, мало просто подключить core-pip — нужно обновиться до свежей Activity 1.13.0 (пока в альфе). В этой версии есть новые API для отслеживания состояния PiP (PictureInPictureUiStateCompat и слушатели), на которых удобно строить логику поведения UI, когда окно уходит в PiP или, например, «прячется» в угол.
// Пример кода: реагируем на состояние PiP
class PlayerActivity : ComponentActivity() {
private val pipUiStateListener =
Consumer<PictureInPictureUiStateCompat> { state ->
if (state.isStashed) {
/* спрятать контролы плеера */
} else {
/* показать контролы плеера */
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ... инициализация UI / плеера ...
addOnPictureInPictureUiStateChangedListener(pipUiStateListener)
}
override fun onDestroy() {
removeOnPictureInPictureUiStateChangedListener(pipUiStateListener)
super.onDestroy()
}
}
🔗 Подробности про библиотека в документации
#Android#AndroidDev#AndroidJetpack#PIP
🚀 Вышел SavedState 1.4.0 — теперь с поддержкой nullable типов
Saved State — это библиотека Jetpack, которая помогает сохранять и восстанавливать состояние при пересоздании, например из-за изменений конфигурации в Android или при выгрузке процесса системой. Поддерживает Kotlin Multiplatform
Вышел androidx.savedstate:1.4.0, и в этом обновлении основное внимание уделено улучшению API. Ключевое изменение - добавлена нативная поддержка nullable типов в SavedStateRegistryOwner.saved, а также в функциях encodeToSavedState() и decodeFromSavedState() — теперь можно напрямую сохранять и восстанавливать null-значения без костылей.
// Теперь это работает корректно без дополнительных проверок.
var name: String? by savedState(saved = "name", default = null)
#android#jetpack#kotlin#kmp#jetpackupdate#androidjetpack
Well, the new site is open for you.
By the way, GiveAways are already available, the next one will start in ~ 8 minutes, hurry.
#site#Giveaways#Wallpapers#icons
#Android#iOS#PC
Available on the website:
- Wallpapers.
- Icons.
- Guides (which will be replenished soon).
- GiveAways.
- Cool design in the style of MaterialYou.
- Web Chrome App.
- Notifications about loading new wallpapers, promotions and giveaways.
New Site:https://pashapumadesign.com/
📰Get more boosts by gifting Telegram Premium!
In the latest information received from Telegram beta configuration by @tgcrawl, it was found that if you buy a Premium subscription for yourself, you will receive one available boost and if you gift a subscription to one of your contacts, you will receive some additional boosts.
When you want to boost another channel while you have already boosted another channel, this message will be displayed to you:
"To Boost **1%$s** reassign a previous boost or gift Telegram Premium to a friend to get **%2$d** additional boosts"
This is an example
#Boost | #Configuration | #Beta v.10.2
👉The TG Times
🤖В Android 17 запретят прямой доступ к контактам (скорее всего через требование Google Play). На смену приходит Contact Picker
В Android 17 появится встроенный пикер контактов, который позволит выбирать один или несколько контактов, задавая поля которые вам нужны.
Ранее уже был ACTION_PICK, а теперь будет ACTION_PICK_CONTACTS, который запускает спец лаунчер. Для приложения с targetSdk Android 17 и выше будет происходить автоматическая замена на ACTION_PICK_CONTACTS при вызове ACTION_PICK для контактов.
// Указываем какие поля надо получить
val requestedFields = arrayListOf(
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
)
// Создаем Intent
val pickContactIntent = Intent(Intent.ACTION_PICK_CONTACTS).apply {
type = ContactsContract.Contacts.CONTENT_TYPE
putStringArrayListExtra(Intent.EXTRA_REQUESTED_DATA_FIELDS, requestedFields)
}
// Запускаем Intent Laucnher
pickContactLauncher.launch(pickContactIntent)
Пишут что это можно протестировать на старых версиях Android. При отправки Intent c ACTION_PICK надо будет добавить EXTRA_USE_SYSTEM_CONTACTS_PICKER.
Хорошее изменение, давно уже пора было ограничить приложениям доступ ко всем контактам, только вот гранулярный доступ как это было сделано с фото эффективнее, чем пикер. Если со стороны Google Play не будет ограничений для приложений, чтобы использовать разрешение `READ_CONTACTS`, то какой смысл в этой новинках.
Я попытался запустить новый пикер на сборке эмулятора Android 17 Beta 2, но пока там ничего не работает. Наверное поэтому и нету ни одной демонстрации его работы в официальной документации.
🔗Документация по Contact Picker
#Android#AndrooidDev#Android17#Безопасность
🤖Как написать свою библиотеку на C/C++ и работать с ней из Java/Kotlin кода в Android (11м)
Рано или поздно любой разработчик сталкивается с C/C++ кодом в приложениях на разных уровнях:
1️⃣ Базовый уровень - работа с so файлами из подключенных библиотек
2️⃣ Уровень пользователя - вызов C/C++ кода библиотек из Java/Kotlin кода
3️⃣ Профи - написание C/C++ библиотека и использование их из Java/Kotlin кода
Рекомендую вам почитать статью от разработчика из Яндекс Браузера, где много взаимодействия с C/C++ кодом. Автор освещает создания простой C/C++ библиотеки, как её собрать и встроить в код Android приложения через JNI.
Java Native Interface (JNI) — это программный интерфейс, который позволяет коду на Java взаимодействовать с библиотеками, написанными на C, C++ и других языках. В Android он критически важен для выполнения ресурсоёмких операций и работы с нативным кодом.
#android#jni#яндекс
📦 Не храните всю графику в приложении
Одна из лучших практик — храните в приложении только простые иконки в векторном формате, а всю растровую графику держите в облаке. Особенно это важно для приложений, которые не могут работать офлайн 🌐
Почему это стоит делать:
🚀 Меньше вес приложения → быстрее установка и обновления
📉 Не тянете лишние ресурсы, которые пользователь никогда не увидит (например, фичи под подпиской или в определённом регионе)
🌍 Можно адаптировать загрузку под регион, тариф или подписку
💰 Гибкость — обновляйте, отключайте или заменяйте контент без релиза
Как хранить изображения правильно:
- Векторные иконки → храним в ресурсах приложения
- Баннеры, иллюстрации, фото → CDN или облако (Firebase Storage, CloudFront, S3 и др.) Для загрузки используйте image loader: Coil, Glide, Picasso и т.д.
Чтобы грузить локальные ресурсы в Android через URL можно использовать адреса (примеры для приложения с именем пакета com.example.myapp):
- По имени ресурса android.resource://com.example.myapp/drawable/my_image
- По числовому ID android.resource://com.example.myapp/2130837504
⚙️ Для Compose Multiplatform пока нет прямой поддержки таких ссылок, но можно расширить любой image loader и добавить обработку собственных URL или типов данных
#android#оптимизация#compose#coil