卸載Android應用程序時,常常會彈出網頁,作些用戶數據的調查統計。Android是能夠獲取到其它應用被卸載掉這個事件,可是並不能獲取自身被卸載這個事件。從純粹的java層是無法實現的,本文介紹一種方法來實現它。java
原理android
簡單來講就是建立後臺進程,監控文件夾的刪除事件。好比說app的包名是com.myname.myapp,後臺進程監控的文件夾就是/data/data/com.myname.myapp。如何監控文件夾被刪除這一事件,主要用的是inotify系列函數,這在jni中的進程通信的另外一種實現方式 有介紹。git
注意點
程序員
後臺進程只須要一個就好了,不須要多個的,以前我注意到企鵝的一款產品作這個功能時,後臺啓動了多個進程。如何實現?能夠參考Android JNI層確保只有一個進程的一個實現,提供一種思路。github
幾種重點測試情形:a. 清理app的數據 b.升級app c. 強制關閉app,而後重啓app。app
代碼eclipse
github地址 uninstallWatcher
ide
代碼實現以及demo都有了,接口也已經封裝好,判斷後臺進程是否惟一,有點過於簡單,歡迎完善代碼。函數
代碼使用也很簡單。測試
public class DemoApp extends Application{ @Override public void onCreate() { Log.i("UninstallDemoApp", "onCreate"); WatchDog.init2("com.bananachip.uninstall", "libwatchDog.so", WatchDog.getUserSerial(this), "http://www.baidu.com"); super.onCreate(); } }
程序員都看得懂,不作解釋。
我這個實現中,判斷進程是否存在作的比較簡單,僅僅是查詢進程名libwatchDog.so。使用時本身要更名。
如何編譯?
jni部分不是經過eclipse編譯的。
cd jni
ndk-build
rename.bat
使用eclipse運行demo
其它
1. 本文參考了其它博客,不過博客實現有很多問題。
2. 不是全部的android機型刪掉app以後都能彈出網頁,好比小米,紅米,這些機型會對後臺進程進行額外的管理。
------------歡迎評頭品足
------------by jacksonke