Android-приложение, которое работает поверх ВСЕХ других приложений?

До сегодняшнего дня я бы сказал, что это просто невозможно, иметь приложение, работающее поверх всех остальных: домашних экранов, приложений, номеронабирателя и т. Д.

Если вы попробуете бесплатное приложение "Super Manager", оно сделает именно это. Он имеет значок и виджет, как экран, который будет отображаться всегда и везде. Пока значок или виджет находятся на экране, вы все равно можете взаимодействовать с приложением, работающим за ним.

Как это возможно и как мы можем воссоздать эту функциональность?

Обновление: вот некоторые изображения этого в действии. Вы можете видеть наложенное приложение, работающее в виде маленькой стрелки на вершине Dolphin. Затем, когда вы нажимаете его, вы можете видеть, что приложение работает как большой виджет. Даже когда виджет активен, вы все равно можете взаимодействовать с фоновым приложением. В этом примере дельфин является фоновым приложением.

Изображение 1

альтернативный текст

3 ответа

Решение

Видеть это:

Создание системного оверлея (всегда сверху)

Проверьте раздел комментариев принятого ответа. Вы найдете ссылку на рабочий пример проекта.

== EDIT ==

Ссылка на проект

Начиная с Android 4.x, команда Android из команды Android исправила потенциальную проблему безопасности, добавив новую функцию AdjustWindowParamsLw(), в которую будут добавлены FLAG_NOT_FOCUSABLE, FLAG_NOT_TOUCHABLE и удалены флаги FLAG_WATCH_OUTSIDE_TOUCH для окна TYPE_SYSTEM_OVERLAY.

Это окно TYPE_SYSTEM_OVERLAY не будет получать никаких событий касания на платформе ICS и, конечно, использование TYPE_SYSTEM_OVERLAY не работает на ICS или будущих устройствах.

Обновлено: 2016/5/4. TYPE_TOAST не может получать сенсорные события на Android 4.0~4.3. Это так же, как TYPE_SYSTEM_OVERLAY. В Android 4.4+ TYPE_TOAST удаляется из списка исключенных, поэтому вы также можете использовать TYPE_TOAST для получения сенсорных событий на устройствах Android 4.4+.

Это может быть сделано комбинацией вещей. Начальная кнопка выполняется путем создания окна типа TYPE_SYSTEM_OVERLAY . Эти окна не могут получить фокус, однако вы можете использовать FLAG_WATCH_OUTSIDE_TOUCH, чтобы получать события касания и сопоставлять координаты, чтобы понять, что вы были затронуты.

Точно так же есть http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html (и TYPE_SYSTEM_DIALOG).

Наконец, действие может быть создано с помощью http://developer.android.com/reference/android/R.style.html (или вариантов).

Другие вопросы по тегам