2016-03-25 52 views
0

我想要在安裝時監視應用程序。我知道我應該使用廣播接收器,並且我還應該添加如何在接收器中使用<intent-filter>

<receiver android:name="com.gr.xxx"> 
    <intent-filter > 
     <action android:name="android.intent.action.PACKAGE_ADDED"/> 
     <action android:name="android.intent.action.PACKAGE_REPLACED"/> 
     <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
     <data android:scheme="package"/> 
    </intent-filter> 
</receiver> 

in the mainifest。但是,如果我不寫這<data android:scheme="package"/>它不會工作。

我的問題是:我怎麼知道是否應該寫<data>或不。我應該在計劃中寫什麼?

回答

0

但是,如果我不寫這不會工作。

正確。

大多數廣播Intents沒有爲「數據」方面,這就是爲什麼你通常看不到<data>元素<intent-filter>元素<receiver>元素填充在Uri。但是,與包相關的廣播做了Intent中放了一個package:Uri,因此您需要將其包含在您的過濾器中。

我怎麼能知道是否應該寫或不

在這種情況下,對於這些Intent行動的文件有「數據包含包的名稱」。這個小小的陳述是告訴你,你需要一個<data>元素的線索。然而,它並沒有告訴你該計劃是什麼,這就是爲什麼你在搜索互聯網時發現你爲什麼不能工作。幾天前,我遇到了這個問題,這些問題與這些相同的Intent操作有關。

理想情況下,文檔會更好。理想情況下,我會有頭髮。

我該寫什麼方案?

這將是可能的Intent用於Uri的方案(S)。

你會遇到這樣的多與<activity>,在那裏你會看到content:方案很多,file:方案有很多(雖然減少),有時http:https:方案。這是因爲我們使用的UriActivity的使用頻率比使用UriBroadcastReceiver更頻繁。

+0

'android.intent.action.PACKAGE_ADDED'是一個系統動作。 **源代碼**在哪裏?因爲你說「你會遇到這個更多,」>我找不到意圖,因爲我只知道動作名稱。我不知道包和類。所以我不能得到意圖的代碼 –

+0

@gus_gao_CHINA:「源代碼在哪裏?」 - https://source.android.com某處。您不應該需要它來響應這些「意圖」操作。請參閱https://github.com/commonsguy/cw-omnibus/tree/master/Introspection/SAWMonitor獲取示例項目,該示例項目將偵聽您的問題中添加和替換的操作。 – CommonsWare

+0

謝謝。只是另一個問題:例如,當我想要使用此操作'ACTION_MEDIA_UNMOUNTED'我怎麼知道我應該設置'scheme = file'而不是'content'或其他東西?當我使用內容提供者時,我可以在源代碼(提供者)中獲得uri。 –

相關問題