2010-04-21 47 views
9

當應用程序被卸載時,是否有辦法獲取系統通知?檢測應用程序是否被卸載

我想維護當前使用我的應用程序的所有客戶的信息表。但是,如果沒有辦法檢測到這個事件,這似乎是不可能的。

我能想到的第一個解決方案是在後臺監聽android.intent.action.PACKAGE_REMOVED,並且始終運行服務。但是那麼一旦卸載過程結束,該服務會被殺死,還是會在進程啓動之前停止?同樣,即使這是一個解決方案,當他們意識到應用程序的一部分在後臺運行時,它也有可能推遲很多人。

有什麼建議嗎?謝謝!

+0

你能找到解決問題的辦法嗎? – 2012-06-15 14:23:26

回答

6

你可以簡單地做,並維持一個積極使用你的應用程序的用戶表。只需在程序中的某個點上調用Web服務,以顯示它處於活動狀態。如果某個應用程序在某段時間未使用,則將其標記爲不活動。

6

documentation for the PACKAGE_REMOVED action說以下內容:

正在被卸載並收到此意圖包。

所以,你可以監視其他應用程序被卸載,但不是你自己的。

因此,您可能需要跟蹤誰仍在使用您的應用程序,而不是誰停止使用它。如果你不想讓自己的服務器這樣做的開銷,你可以使用免費服務,如Flurry

+1

最近誰使用我的應用程序不是一個準確的測量,這並不能滿足我的需求。我使用GAE,所以我不擔心服務器端。 – mobilekid 2010-04-21 19:27:35

+0

如何監視應用程序卸載與亂舞?這正是我需要的,但無法真正瞭解如何做到這一點。 – mkorszun 2014-05-15 08:57:37

1

從Android的文件,由用戶卸載應用程序不能得不到

Intent.ACTION_PACKAGE_REMOVE 

但我們可以用其他的方法來實現此功能。我們都知道,在用戶安裝應用程序後,在/ data/data目錄下有一個以您的軟件包名稱命名的目錄。如果您的應用程序由用戶卸載,則應用程序的根目錄(/data/data/com.example.yourappname)將被系統刪除。刪除操作在用戶點擊「卸載」時立即發生,並且該目錄將被框架包管理器系統刪除。因此,我們可以監視您的應用程序數據目錄(通常爲/data/data/com.example.yourappname)的存在以檢測您的應用程序是否由用戶卸載。

爲了監視這個目錄,我們必須從JNI中分離出一個分離的進程。 在這個新的fork過程中,我們可以使用Linux系統api inotify(7)或access(3)來確定應用程序數據目錄的存在。

Here是一個可行的實現。但是當嘗試發送在高版本Android設備上啓動系統瀏覽器的意圖時,它遇到了許可問題。我不知道如何繞過這一點。然而上面的例子對於你的問題已經足夠了。

希望它會有所幫助!

0

Android不提供用於跟蹤應用程序卸載的內置功能。

通知可用作跟蹤應用程序卸載的替代方法。爲此在應用程序上發送通知並跟蹤通知的狀態。計算特定時間段內未送達通知的數量。如果未送達通知的狀態在特定時間段內未發生變化,請考慮應用程序是否已從設備上卸載。

例如,我使用了一個每3天運行一次的cron腳本,並檢查最近10次傳遞到設備的通知的狀態(每天發送2次通知)。如果所有這10個通知的狀態均爲「未傳送」,則應用程序將被視爲從設備上卸載。

相關問題