OnTouchListener не работает в Service (на Xiaomi)

157
20 марта 2018, 00:56

Есть сервис, который имеет свойства View.OnTouchListener Дальше при создании сервиса:

@Override
    public void onCreate() {
        super.onCreate();
        try {
            View touchView = new View(this);
            touchView.setLayoutParams(new LinearLayout.LayoutParams(30, 30));
            touchView.setOnTouchListener(this);
            WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
            if (mWindowManager != null) {
                WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(30, -1, 2002, 262184, -3);
                mParams.gravity = 51;
                mWindowManager.addView(touchView, mParams);
            }
        } catch (Exception ignored) {
        }
    }

Ну и сам перехват:

@Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        Log.d("touch","i'm here");
        return false;
    }

На всех аппаратах кроме Xiaomi событие тача работает, как решить эту проблему?

Answer 1

Я полагаю, что это связано с тем, что доступ к View из Service является не очень хорошей практикой.

Сервис по определению является компонентой без UI и доступ из Service к UI можно делать на основе только строго специального вида усилий, типа: Handler, Broadcast или Bound Service, а то что вы пытаетесь сделать это просто хак, который иногда работает, а иногда не работает. Xiaomi значит молодцы, что у них в их прошивке это не работает :)

Ну и тем более опус типа:

View touchView = new View(this);

это тоже за гранью добра и зла.

Answer 2

Ответ нашел. При попытке в сяоми использовать такой метод:

.getWindow().setType()

вызывает баг в системе, в результате чего AlertDialog или другое UI - становится невидмым

READ ALSO
Создание списка из массива?

Создание списка из массива?

Здравствуйте уважаемые !

200
DOM . Jquery. Задать стиль дочернему элементу

DOM . Jquery. Задать стиль дочернему элементу

При наведении курсора на блокgrid-item надо чтоб на ЕГО дочерний элемент

225
Как в одном input совместить два name

Как в одном input совместить два name

Как в одном input совместить два name? Есть два обработчика file и files[], их нужно совместить в одном name=''Можно ли это реализовать? Обработчик file загружает...

271