注意:
- adb應該已經在PC中設置。
- 對於4.4版之前的Android .x,可能需要root用戶訪問權限。
- 某些命令在版本5.1之前的Android上將不起作用。
- 跳轉至標題為“ 應用程序應用”的標題如果您不熟悉命令行或不熟悉命令行和/或命令行無法解決您的問題。
編輯:在較早的解決方案中追逐並遵循
設置 adb並運行以下命令:
adb shell“ dumpsys窗口窗口| toybox grep -i system_alert_window”
您將在屏幕上獲得所有活動覆蓋的輸出。帶有DU屏幕錄像機,Tasker和AZ屏幕錄像機的輸出示例,顯示屏幕上的活動覆蓋層:
bash-4.3#adb shell“ dumpsys窗口windows | toybox grep -i system_alert_window” mOwnerUid = 10087 mShowToOwnerOnly = true package = net.dinglisch.android.tasker b> appop = SYSTEM_ALERT_WINDOW mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free b> appop = SYSTEM_ALERT_WINDOW mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW mOwnerUid = 10649 mShowToOwnerOnly = true package = com.duapps.recorder b> appop = SYSTEM_ALERT_WINDOW mOwnerUid = 10649 mShowToOwnerOnly = true package = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW mOwnerUid = Only = b638 .sesame.app.edge b> appop = SYSTEM_ALERT_WINDOW
package = 旁邊和 appop 之前突出顯示的文本是應用程序的程序包名稱當前正在繪製疊加層屏幕上。在您的情況下,包含軟件包名稱的輸出會有所不同。
記下軟件包名稱(此後稱為PKG)並執行以下命令:
adb shell是強制停止的PKG
用您記下的軟件包名稱替換 PKG 。如果您有多個程序包名稱,請一次用一個程序包名稱重複該命令。
該命令將強制停止應用程序,從而丟棄覆蓋。這應該工作。您也可以使用以下命令從應用程序中剝奪“在其他應用程序上繪製”的權限(簡稱為屏幕覆蓋):
adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore
>
再次,根據需要用軟件包名稱替換PKG。此外,您可能必須對PKG重複執行強制停止命令。如果決定恢復更改,請在上述命令中將 ignore 替換為 allow 。
您也可以使用 App Ops來管理來自GUI的權限。
要知道哪個程序包名稱與哪個應用程序相對應,可以嘗試使用像 Applications Info這樣的開源應用程序。通過軟件包名稱搜索,您將得到應用程序的名稱。
編輯完成
您真的現在不需要閱讀。我保留了較早的解決方案(即以下部分),因為21個投票的人確實找到了幫助,並且我不想再搞砸了。
一個簡單的方法是找出所有具有“覆蓋其他應用程序”權限的應用程序,然後從屏幕上當前處於活動狀態的應用程序中挑選出來。然後,強制停止這些常見的應用程序,直到您確定負責活動疊加層的應用程序為止。
枚舉具有疊加層權限的應用程序
應用創建疊加層所需的權限為 android.permission.SYSTEM_ALERT_WINDOW
(覆蓋其他應用)。
我們需要找出所有具有上述權限的已安裝應用。您需要自己找到一種方法。我的回答此處可能會對您有所幫助。
請注意,我們需要應用程序的程序包名稱而不是它們的標籤。
從活動窗口中選擇櫻桃
執行命令
adb shell dumpsys窗口Windows
提供有關導致屏幕上顯示內容的詳細信息,包括導致該屏幕顯示的應用程序的組件名稱。
如何提取名稱取決於您。您可以嘗試使用此命令
adb shell'dumpsys窗口grep“ Window#”'
如果收到錯誤:'grep'不被識別為內部或外部命令,則在Windows上嘗試以下替代命令:
adb shell“ dumpsys窗口windows | grep'窗口#'”
演示輸出
窗口#4窗口{42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:窗口#5窗口{42197468 u0 ginlemon.flowerpro / ginlemon.flower.HomeScreen}:窗口#6窗口{420fdb58 u0 com.android.systemui.ImageWallpaper}:窗口#7窗口{421e3b88 u0 com.android.contacts / com.android.contacts.activities.DialtactsActivity}:
在上面的輸出中, u0
之後和之前的所有內容/
是應用程序的軟件包名稱。一個應用程序可以具有多個在屏幕上顯示內容的組件。
您必須創建這些程序包名稱的列表。如果已安裝BusyBox,則可以
adb shell'dumpsys窗口grep“窗口#” | sed -e“ s /.* u0 // g” -e“ s /\/.*// g” -e“ s /}:// g”'
,現在您將擁有兩個列表:
- 第一個列表包含所有具有
android.permission.SYSTEM_ALERT_WINDOW
權限的應用。 - 第二個列表包含所有主動在屏幕上顯示內容的應用。
比較這兩個列表和兩個列表中常見的應用程序。此第三列表將由具有繪製覆蓋圖權限的應用組成,並且當前正在屏幕上繪製活動覆蓋圖。
殺死時間
殺死第三列表中的每個應用並註意覆蓋狀態。您可以使用 am-stop PACKAGE_NAME --user 0
或其他任何適合您的方法。 PACKAGE_NAME
是應用程序的程序包名稱。
編輯:沒有必要終止應用程序。您可以考慮拒絕該應用繪製其他應用的權限。使用以下命令:
adb shell'appops set PACKAGE SYSTEM_ALERT_WINDOW deny'#用應用程序的程序包名稱替換PACKAGE
要還原更改,請替換 deny 在上述命令中加上 allow 並執行它。
如果您運行的是Android Marshmallow,則這個答案由Andrew可以使用T.。
注意:上述命令已在Android 5.1.1和6.0.1(CM構建)上成功測試。該命令也有可能在Android 5.0.x上運行,但我不能保證。在Lollipop之前發布的Android版本上執行該命令會導致失敗。
由於通常可以看到疊加層,因此該疊加層會在導致其被殺死的應用程序消失後立即消失。 ,您會知道是哪個應用導致了該重疊。
最初由Izzy建議,您可以使用具有列出授予已安裝應用程序權限的功能的應用程序,以選出具有“覆蓋其他應用程序”權限的應用程序。您可以自己搜索此類應用,也可以使用Izzy在其網站上維護的列表權限檢查器。
您還需要一個流程/應用管理器來強制執行以下操作:停止/殺死某些進程。我建議 OS Monitor,但您可以自由使用任何稱職的應用程序。查看系統信息下的相關應用。
僅出於演示目的
我嘗試了高級權限管理器列出了具有以下權限的應用: “覆蓋其他應用”。之後,我切換到OS Monitor,以查看在前台和後台運行的應用程序。我匹配了兩個應用程序的輸出,並分別強制停止了這兩個應用程序中常見的應用程序。您可以從OS Monitor內終止進程,因此無需切換到App設置。
(點擊圖片放大) sub>