有没有办法确保我的应用程序的窗口不会被任何其他应用程序的视图使用SYSTEM_ALERT_WINDOW
权限遮挡?
如果没有,那么有没有更好的方法来确保我的应用程序不被这样的窗口遮挡,除了获得相同的权限和刷新/显示/我自己的视图(当然在警报窗口中显示)每 100毫秒左右让它可见?
如果我的应用程序被遮挡,最终会闪烁,这实际上是一件好事,也是用户指出错误的指示。
编辑:除了通过三星的KNOX或Trusted UI的其他专有解决方案之外,似乎无法做到这一点。接受的答案足以达到我的目的,但这不是问题的答案。
答案 0 :(得分:1)
即使它并不完全是你所问的,我所知道的最接近的替代品是:
android:filterTouchesWhenObscured="true"
(触摸事件将被过滤,如果他们正在通过叠加层,则无法到达您的View
,无论是透明还是不透明)。见View#setFilterTouchesWhenObscured(boolean),View#onFilterTouchEventForSecurity(android.view.MotionEvent)
并检查FLAG_WINDOW_IS_OBSCURED
。见View#onFilterTouchEventForSecurity(android.view.MotionEvent)。稍后可以这样实现:
override fun onFilterTouchEventForSecurity(event: MotionEvent): Boolean {
if ((event.flags and MotionEvent.FLAG_WINDOW_IS_OBSCURED) == MotionEvent.FLAG_WINDOW_IS_OBSCURED) {
Toast.makeText(context, "Screen overlay detected!", Toast.LENGTH_LONG).show()
return false // touch event is cancelled
}
return super.onFilterTouchEventForSecurity(event)
}
另请参阅View类文档的Security section。
请注意,此功能可从API 9+获得。可以在此SO问题中找到旧API的解决方法:Analogue of android:filterTouchesWhenObscured for API level below 9。