Пипетка без границ
Накатив Android 17 на свой старенький пиксель, я первым делом полез смотреть важнейшую фичу обновления – пипетку EyeDropper.
Это системная активити, которую приложение запускает через неявный интент ACTION_OPEN_EYE_DROPPER. Юзерок выбирает пиксель на экране, после чего пипетка возвращает его цвет в ARGB. Под капотом делается снимок экрана, поверх него рисуется прицел с увеличенной областью 7×7 пикселей.
Все красиво, но из коробки пипетка оказалась кастрированной. Она жестко привязана к вызывающему приложению. Попытка куда-то перескочить вызывает onStop и смерть процесса. Выбрать цвет можно только внутри нашего приложения. В данном случае это не баг, а фича. Пипетка появилась, чтобы приложения могли брать цвет с экрана без доступа к его содержимому.
Спрашивается, зачем она тогда нужна? Только для разработки рисовалок и фоторедакторов.
Но потребность узнавать цвета других приложений не закрыта. Чтобы это исправить, я скоммуниздил механику пипетки из AOSP и собрал 🐗 EyeDropperAnywhere – пипетку, которая работает поверх всей системы.
• Через MediaProjection захватывается содержимое экрана
• Foreground service продолжает работать при переключении между приложениями
• TYPE_APPLICATION_OVERLAY рисует пипетку поверх остальных окон
• Область 7×7 пикселей под прицелом обновляется в реальном времени
• Выбранный цвет копируется в буфер обмена в формате #RRGGBB
• Запускать пипетку можно через плитку в шторке быстрых настроек
Можно перейти в любое приложение, открыть пипетку и пикнуть цвет, который видишь на экране.
🐗 Гайд по EyeDropper
Post #435
307