標籤:
卸載Android應用程式時,經常會彈出網頁,做些使用者資料的調查統計。Android是可以擷取到其它應用被卸載掉這個事件,但是並不能擷取自身被卸載這個事件。從純粹的java層是沒法實現的,本文介紹一種方法來實現它。
原理
簡單來說就是建立後台進程,監控檔案夾的刪除事件。比如說app的包名是com.myname.myapp,後台進程監控的檔案夾就是/data/data/com.myname.myapp。如何監控檔案夾被刪除這一事件,主要用的是inotify系列函數,這在jni中的進程通訊的另一種實現方式 有介紹。
注意點
後台進程只需要一個就行了,不需要多個的,之前我注意到企鵝的一款產品做這個功能時,後台啟動了多個進程。如何??可以參考Android JNI層確保只有一個進程的一個實現,提供一種思路。
幾種重點測試情形:a. 清理app的資料 b.升級app c. 強制關閉app,然後重啟app。
代碼
github地址 uninstallWatcher
代碼實現以及demo都有了,介面也已經封裝好,判斷後台進程是否唯一,有點過於簡單,歡迎完善代碼。
代碼使用也很簡單。
public class DemoApp extends Application{@Overridepublic 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
卸載Android app彈出瀏覽器的一種實現