アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

Android Oreで「startForegroundService」を使わないでオーバーレイした時に起きる通知画面との問題

API Levelとオーバーレイ

Android Oreo(API Level 26)からWindowManager周りが変わってオーバーレイをするには色んなレイヤーがありましたが「TYPE_APPLICATION_OVERLAY」にまとめられたり「startForegroundService」を呼んで「startForeground」を使わないといけなくなったりしました。

AccessibilityServiceから呼ぶ

今「AccessibilityService」を使った開発で更にオーバーレイもするというアプリを作っているのですがAccessibilityService自体がServiceなのでここで「windowManager.addView」すればいいのではと思ってやってみましたが思いもよらないところでハマってしまいました。

問題

基本的に挙動は変わらないのですが通知を下ろした時に問題が発生してしまいました。

f:id:matsudamper:20180218165122p:plain:w300
このようにオーバーレイで右端にバーを表示しました。

f:id:matsudamper:20180218165115p:plain:w300
通知を下ろします。通知画面の下に「描画」されているオーバーレイした右のバーの部分をタッチするとタッチは下のバーの部分に持っていかれて通知のタッチが効きません。

描画は通知が上だけどタッチはaddViewしたものに持っていかれてしまいます。

解決

ちゃんと「startForegroundService」で別サービスを起動して「startForeground」を使いましょう。