簡體   English   中英

檢測到屏幕疊加 - 如何在屏幕疊加應用中處理此問題

[英]Screen overlay detected - How to handle this in an screen overlay app

某些設備具有額外的安全功能,並在顯示權限對話框時檢查應用是否在其他設備上繪制。

我有一個側邊欄應用程序,我的應用程序必須被禁用,然后用戶才能接受系統對話框。

問題

  • 我怎么處理這個案子?
  • 有沒有辦法聽一個“顯示系統對話框”事件,這樣我就可以刪除我的側邊欄和“完成系統對話框”,以便我知道,我可以繼續我的側邊欄覆蓋? 我知道,這足以停止服務(你不必刪除權限),所以這也是一個解決方案

編輯

我能想到的一個解決方案如下:

使用AccessibilityService檢查當前的前台應用程序/視圖。 在那里,我將能夠檢查顯示當前前景活動甚至視圖的事件......

我的問題:

  • 我不知道如何識別那里的權限對話框。
  • 其次,這迫使我要求用戶獲得此權限(我想避免,但是使用此服務的解決方案,對我來說已經是一個改進,因為一些用戶已經將此權限授予我的應用程序 - 我會然后問所有人並解釋原因,這是我可以忍受的事情)。

據我所知,你想要的是不可能的。 在類似的問題中 ,有一個檢測系統對話框的解決方案,但我不認為它適用於您的覆蓋(僅適用於當前活動的活動)。

另一個問題表明,可以通過ActivityManager類監視系統對話框,但是自LOLIPOP以來該API已被棄用。

出於這些原因,我建議您在疊加層中添加一個暫停按鈕。 或者甚至更好, 使用帶停止/啟動按鈕的粘性通知 ,以便用戶可以手動暫停疊加。


要識別系統應用程序,您需要包名稱,如本答案中所述

 public boolean isSystemApp(String packageName) { try { // Get packageinfo for target application PackageInfo targetPkgInfo = mPackageManager.getPackageInfo( packageName, PackageManager.GET_SIGNATURES); // Get packageinfo for system package PackageInfo sys = mPackageManager.getPackageInfo( "android", PackageManager.GET_SIGNATURES); // Match both packageinfo for there signatures return (targetPkgInfo != null && targetPkgInfo.signatures != null && sys.signatures[0] .equals(targetPkgInfo.signatures[0])); } catch (PackageManager.NameNotFoundException e) { return false; } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM