題:
Determine which app is drawing on top of other apps?
andreroggeri
2015-11-03 04:57:40 UTC
view on stackexchange narkive permalink

是否可以確定哪個應用程序在其他應用程序之上繪製?

例如,Facebook Messenger應用程序可以在所有內容上繪製聊天氣泡,但是我如何知道哪個應用程序

我的問題:

我有一個應用程序正在所有內容的上方繪製廣告,我想知道哪個應用程序正在執行此操作。不僅是為了卸載它,而是警告所有使用此應用程序的人。 (我最近沒有安裝任何應用程序,並且已經驗證了最新更新。)

我嘗試使用Android Studio中的 UI Automator轉儲視圖層次結構,但是它似乎無法以這種方式選擇在頂部繪製的應用程序。

(單擊圖片放大) sub>

Android Studio Screen

只是為了增加以下答案中指出的問題(嘗試使其完整)。在TouchWiz(三星Galaxy,我的是Note 4)中,關閉側面按鍵板為我解決了此問題。
對於非開發人員,只需在此處查看應用列表即可:http://android.stackexchange.com/questions/154274/screen-overlay-detected-dialog-turned-off-everything-doesnt-work/157029#157029
四 答案:
Firelord
2015-11-04 03:33:28 UTC
view on stackexchange narkive permalink

注意:

  • 應該已經在PC中設置。
  • 對於4.4版之前的Android .x,可能需要root用戶訪問權限。
  • 某些命令在版本5.1之前的Android上將不起作用。
  • 跳轉至標題為“ 應用程序應用”的標題如果您不熟悉命令行或不熟悉命令行和/或命令行無法解決您的問題。

編輯:在較早的解決方案中追逐並遵循

設置並運行以下命令:

  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>

IMG: IMG: IMG:

非常感謝Firelord。我從您的帖子中學到了很多東西!
謝謝,當我試圖找到一個廣告軟件應用程序時,該窗口列表是一個救命稻草,該應用程序似乎可以覆蓋所有內容……而無需“繪製其他應用程序”權限。
Andrew T.
2016-02-04 12:22:02 UTC
view on stackexchange narkive permalink

如果您使用的是Android 6.0 Marshmallow,則可以使用其本機權限管理器。

來自關於BGR的文章

Android 6.0 Marshmallow具有許多備受期待的新功能,其中之一就是iPhone用戶多年來使用的功能:粒度應用程序權限。 Phone Arena安裝了Marshmallow的最新開發人員預覽版,並發布了一些絕妙的技巧來幫助Android用戶確保他們僅與他們特別想共享的應用共享數據。

要訪問Marshmallow的權限管理功能,您可以將要打開“設置”菜單,然後單擊“應用程序”部分。從那裡,單擊Gear圖標,然後將為您提供轉到應用程序權限管理器的選項。

要列出可以覆蓋其他應用程序的應用程序,請轉到設置-應用-高級(帶有齒輪圖標的菜單)-在其他應用上繪圖

您還可以通過點按應用並啟用“允許在其他應用上繪圖”來暫時啟用/禁用該功能“。

Android M permission manager

圖片由 Sebastiano Gottardo在Medium sup> p中提供>

對我而言,高級(帶有齒輪圖標的菜單)丟失了,但是它位於頂部/右側的圓點圖標,然後是;應用程序配置。
mitchbw
2016-08-11 01:46:36 UTC
view on stackexchange narkive permalink

感謝一群@Firelord!我終於找到了阻止我安裝apk並執行adb備份的應用程序。

對我來說,我發現它是一個名為 Battery Mix 的應用程序,請繼續閱讀以了解我的內容。做了以及我是怎麼做的。

https://play.google.com/store/apps/details?id=jp.smapho.battery_mix

許多人在安裝apk時遇到問題,無法按“安裝”。我能找到的所有答案主要是顯示調光,著色,節能的應用程序。由於我未使用任何軟件或已刪除所有類似的應用程序,因此我一直在努力查找正在發生的事情以及哪個應用程序是罪魁禍首。最後!經過一個簡單的命令並進行了快速搜索,便已解決:D

令人討厭的應用程序 Battery Mix 是一個簡單的電池監控應用程序,具有我以前用來顯示薄電池的功能。屏幕頂部的橫線顯示電池電量的狀態(一個很棒的小應用程序)。

為進行診斷,我使用了 Firelord (上圖)中的命令來轉儲文本文件,然後搜索導致android系統阻止我單擊該安裝按鈕的應用程序。

從PC執行命令

adb shell dumpsys窗口Windows > dumpsys-windows.txt

搜索

SYSTEM_ALERT_WINDOW

要查找任何有問題的應用程序,我都在上面的字符串中搜索

其中給了我這行:

mOwnerUid = 10129 mShowToOwnerOnly = true package = jp .smapho.battery_mix appop = SYSTEM_ALERT_WINDOW

(請參見上載圖像的文本文件部分) enter image description here

立即我就能認出它指的是哪個應用程序:jp.smapho。 battery_mix

所以現在我知道每當我打算側載或進行adb備份時都要殺死該應用程序。 >

DILLIRAJ PD
2016-06-09 13:31:07 UTC
view on stackexchange narkive permalink

對於Android棉花糖和Oxygen 3.0.2,禁用屏幕佈局彈出窗口

轉到應用並配置應用,然後選擇在其他應用上繪製。

轉到並選擇要禁用的應用程序,以使該應用程序不受屏幕佈局權限的限制。並且該應用可以直接獲取權限

轉到相應的應用和權限,然後啟用所需的權限。

享受

Raj

所有這些信息已經在Andrew T的答案中了。您無需發布新答案即可重複相同的說明。盡力解決尚未解決的問題:-)


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...