2010-11-04 50 views

回答

6

你不會去找那個。意圖過濾器由應用程序定義。你不得不看的文檔,你感興趣的paritcular應用。

+0

Ahan讓我看看那個...... – 2010-11-04 07:08:11

+1

我可以告訴你,你將無法確定大多數應用程序什麼時候開始,並且幾乎肯定無法知道它們什麼時候進入前臺。當然,如果您需要此信息用於特定目的,歡迎您修改android固件。但是否則這是一個安全問題。 – Falmarri 2010-11-04 07:21:54

+0

不幸的是,只有一小部分應用程序爲他們的意圖提供了文檔... – pleerock 2012-08-20 03:36:27

3

(部分答案)IntentFilters在應用程序中包含的.apk文件AndroidManifest.xml文件中定義。 (中 - > - > - > XML元素,像這樣:

我還沒有找到一個API,用於搜索在存儲設備上所有的apk文件中定義的所有意圖系統搜索列表的所有意圖:android.content.Context.startActivity(意圖意圖) 它調用android.app.ActivityManagerNative.startActivity()中的本機方法,它使用進程間通信(IPC)機制(使用序列化的「包裹」對象)來搜索意圖和啓動活動。所以,我可以找到它是如何真正做。

看樣子,你可以得到讀取訪問的apk文件(馬NY存儲在/system/app/*.apk)。 .apk文件是一個.jar文件,並且AndroidManifest.xml文件可用,因此程序應該能夠讀取和解析清單並找到IntentFilters - 但應該有API來簡化它。

+0

我剛剛嘗試了它,AndroidManifest.xml以某種方式被髮送。我可以讀一些字符串,但其餘的只是字節碼。 – Nulano 2014-07-14 09:43:04

34

PackageExplorer列出你的設備的應用程序中定義的所有意圖過濾器

要回答你的問題:您創建的意圖過濾器(S)你想被用來使你的活動,在選擇時,一個程序尋找服務或活動。因此,包中的每個活動都會定義它自己的意向過濾器列表。

我發現它非常有用的一個設備上的所有應用程序中定義的所有意向過濾器的列表 - 所以會知道哪些應用系統時,被處理的意圖將調用。我在Android Market上放了一個免費應用程序,搜索「包資源管理器」,搜索它可以在設備上找到的所有應用程序,解碼AndroidManifest.xml文件並顯示所有應用程序定義的所有意圖過濾器的列表。所有意圖過濾器的表格可以按行動,類別,數據字段(即方案或mimetype),包裹名稱或意向過濾器類型進行排序,以便您可以在設備上找到響應各種行動或類別的所有活動信息。

Package Explorer中還收集清單中的所有用途的權限字段和顯示這些應用程序需要哪些權限列表。所以你可以找到所有使用'SEND_SMS'或類似的軟件包。點擊軟件包的名稱將顯示該軟件包的解碼(未壓縮二進制)AndroidManifest.xml。

+0

就是這樣 - https://play.google.com/store/apps/details?id=fr.xgouchet.packageexplorer&hl=en? – 2015-08-13 06:38:50

+0

@techtonik是的,這顯然是。這是每個應用的_Broadcast Receivers_部分,它對我來說工作正常。 – Guillaume 2015-09-25 15:01:43

3

您可以檢查SDK標準動作和類別列表/platforms/android-x/data/broadcast_actions.txt

+0

抱歉,我的錯誤標準類別在'categories.txt'上 – IronBlossom 2013-10-23 04:47:45

+0

您可以編輯自己的帖子,並提供一個鏈接到您發現的位置? – not2qubit 2016-04-22 15:54:27

10

如果您關閉設備,您可以只運行以下命令:

adb shell dumpsys軟件包r

這會給你一個所有靜態註冊的意圖過濾器的列表。

+0

不幸的是,它轉儲了數組PackageManagerService.mActivities,這是外部不可用的。所以你不能通過API訪問意圖過濾器。 – Oleksandr 2015-04-16 12:21:03

3

在Tom Fraser的回答中展開,最好的方法是使用dumpsys進行grep和排序。

dumpsys activity broadcasts |grep -iE ".+\.[0-9A-Z_\-]+:$" |sort 

grep的表現會確保在這樣的...blahblah.SOME_INTENT:格式的意圖結束只抓線。它可能並不全面,但這是一個好的開始。

+1

在我的情況(Linux)中,我必須刪除'$'–,可能是由於EOL。 – pevik 2015-11-09 08:14:38

相關問題