API Levelとオーバーレイ
Android Oreo(API Level 26)からWindowManager周りが変わってオーバーレイをするには色んなレイヤーがありましたが「TYPE_APPLICATION_OVERLAY」にまとめられたり「startForegroundService」を呼んで「startForeground」を使わないといけなくなったりしました。
AccessibilityServiceから呼ぶ
今「AccessibilityService」を使った開発で更にオーバーレイもするというアプリを作っているのですがAccessibilityService自体がServiceなのでここで「windowManager.addView」すればいいのではと思ってやってみましたが思いもよらないところでハマってしまいました。
問題
基本的に挙動は変わらないのですが通知を下ろした時に問題が発生してしまいました。
このようにオーバーレイで右端にバーを表示しました。
通知を下ろします。通知画面の下に「描画」されているオーバーレイした右のバーの部分をタッチするとタッチは下のバーの部分に持っていかれて通知のタッチが効きません。
描画は通知が上だけどタッチはaddViewしたものに持っていかれてしまいます。
解決
ちゃんと「startForegroundService」で別サービスを起動して「startForeground」を使いましょう。