Я новичок в доступе к Android.Просматривая классы и документацию, я обнаружил TYPE_ACCESSIBILITY_OVERLAY
внутри класса WindowManager
.
В документации написано (только соответствующий текст)
Например, если имеется полноэкранный оверлей доступности, который является сенсорным, окна под ним будут интроспективными для службы специальных возможностей, даже если они закрыты сенсорным окном.
Поэтому я решилдостигните только этого, полноэкранного оверлея доступности и попытайтесь проанализировать окна под ним
Extended AccessibilityService
и добавили мой полноэкранный оверлей, когда вызывается onServiceConnected
(вдохновение для добавления оверлея пришло от здесь )
@Override
protected void onServiceConnected() {
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
FrameLayout mLayout = new FrameLayout(this);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
lp.format = PixelFormat.TRANSLUCENT;
lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
lp.gravity = Gravity.TOP;
wm.addView(mLayout, lp);
mLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// Here I'm getting the touch events on the overlay I added
return false;
}
});
}
Теперь вопрос в том, как я могу проанализировать или найти окна под этим наложением?Даже в обратном вызове onAccessibilityEvent
я получаю только это окно наложения. getWindows () всегда имеет size of 1
.Разве это не опровергает сделанное выше утверждение для TYPE_ACCESSIBILITY_OVERLAY
?
Соответствующая информация: Чтобы получать сенсорные события на оверлее, я отключил touchExplorationMode в настройках сервиса
android:canRequestTouchExplorationMode="false"