Рисование плавающего макета на экранах запуска Android и других приложений и управление жизненным циклом этого макета

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

А вот приложение, которое делает то, что я хочу https://play.google.com/store/apps/details?id=com.ninja.sms

Вот подход, над которым я работал: я использовал WindowManager для рисования макета и сервис для управления этим макетом.

Я использовал следующую библиотеку https://github.com/t0mm13b/TouchSoftly, но у нее есть некоторые проблемы 1 Макет не получает действия или сенсорные события, действия переходят к видам под тем, который нарисован этой библиотекой. 2. Макет исчезает, когда убивается активность, запустившая службу.

Итак, я сделал некоторые настройки в следующем фрагменте

    _layOutParams = new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            PixelFormat.TRANSLUCENT);
    _layOutParams = new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            PixelFormat.TRANSLUCENT);

    _layOutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
    _layOutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
    if (_layOutParams != null) {
        Log.d(TAG, "onCreate() - Got _layOutParams!");
        _layOutParams.gravity = Gravity.RIGHT | Gravity.TOP;
    } else
        Log.d(TAG, "onCreate() - _layOutParams is null! :(");


    _hudPageView = _layOutInflater.inflate(R.layout.service_hudpageview, null);

В результате: макет уже нарисован и может получить сенсорное событие, но кнопки «Домой», «Назад» и «Последние приложения» не работают или не влияют ни на какое приложение, пока макет отображается на экране.

Так что все еще не достигает того, что я хочу.

И вот исходный код и репозиторий, над которым я работаю, поэтому вы можете просмотреть мой исходный код https://github.com/mmelsabry/FloatingLayout

Я знаю, что здесь есть еще один вопрос Плавающий виджет/Оверлей на панели запуска Android

но это не помогает


person Mohammed Elsabry    schedule 11.04.2013    source источник
comment
Найдите руководство по ссылке [StandOut — Create Floating Apps][1] [1]: forum.xda-developers.com/showthread.php?t=1688531   -  person Ahmed Daoud    schedule 14.04.2013
comment
попробуйте это: в нем есть все, что вам нужно, легко читается. github.com/EatHeat/FloatingExample   -  person ben f    schedule 28.07.2014


Ответы (1)


Попробуйте использовать TYPE_SYSTEM_OVERLAY вместо TYPE_SYSTEM_ALERT.

person Scorpian    schedule 07.05.2015
comment
Можете ли вы объяснить подробно? этого ответа недостаточно - person Vikasdeep Singh; 07.05.2015