Есть сервис, который имеет свойства 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 событие тача работает, как решить эту проблему?
Я полагаю, что это связано с тем, что доступ к View
из Service
является не очень хорошей практикой.
Сервис по определению является компонентой без UI и доступ из Service
к UI можно делать на основе только строго специального вида усилий, типа: Handler
, Broadcast
или Bound Service
, а то что вы пытаетесь сделать это просто хак, который иногда работает, а иногда не работает. Xiaomi значит молодцы, что у них в их прошивке это не работает :)
Ну и тем более опус типа:
View touchView = new View(this);
это тоже за гранью добра и зла.
Ответ нашел. При попытке в сяоми использовать такой метод:
.getWindow().setType()
вызывает баг в системе, в результате чего AlertDialog или другое UI - становится невидмым
Виртуальный выделенный сервер (VDS) становится отличным выбором
При наведении курсора на блокgrid-item надо чтоб на ЕГО дочерний элемент
Как в одном input совместить два name? Есть два обработчика file и files[], их нужно совместить в одном name=''Можно ли это реализовать? Обработчик file загружает...