1. 程式人生 > >android 如何監聽自身應用被解除安裝

android 如何監聽自身應用被解除安裝

   前段時間有個同事問我android應用在解除安裝以後,如何能夠通知一下伺服器,讓使用者填寫一下解除安裝的原因,以求為將來的應用修改積累資料。當時他是有段原始碼的,但是有點小問題,我只是幫他定位一下了程式碼的問題,具體細節沒有研究。又加上最近工作比較繁忙,所以就放下來了,今天稍微有點空,就自己做了一個應用demo,告知一下諸位在android中如何做到監聽自身應用被解除安裝了。

一  效果演示

    開啟應用效果圖:

wKiom1Mhs9OR3scKAAD4zL7alUE011.jpg

    圖1

    點選解除安裝後提示,如下圖:

wKiom1Mhs-6y41BLAADX1pflCzc704.jpg

    圖2 

    然後退出應用,解除安裝程式,會發現當應用被解除安裝以後,會彈出呼叫瀏覽器的提示,這裡隨便放了一個搜狐瀏覽頁面,在自己的應用中應該呼叫的一般都是調查頁面。如下圖:

wKioL1Mhs-bQSyr9AAJlZrk2vRQ245.jpg

    圖3

    ok,效果前面已經演示了,現在需要討論一下其具體實現了。

    首先,通過adb shell進入手機,然後第一次進入應用,像圖1一樣,不點選按鈕,通過 ps | busybox grep ubuntu 看這個應用的程序資訊,如下圖:

wKiom1MhtCugT7LOAADE4ueeAgc933.jpg

   這個時候只有

   u0_a108   2953  124   490956 47792 ffffffff 40052a40 S com.example.ubuntuforandroid
   2953 這一個程序

   點選 解除安裝後提示 按鈕再次,執行剛才執行的ps命令,發現已經有兩個程序瞭如下圖:

wKioL1MhtBrBigecAADyASYLYkg469.jpg

  其實新產生的程序是通過程式呼叫jni介面

1 public static native int Reguninstall(String path,String url);

  這個介面fork了一個程序,而新fork的程序負責監聽本應用是否被解除安裝了

二  原始碼分析

  java層的程式碼如下,很簡單,就是呼叫一下jni介面

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initInjectFunction("testfile"); test = (TextView)this.findViewById(R.id.testview); test.setText("點選解除安裝後提示按鈕,你的應用在解除安裝以後會呼叫瀏覽器,然後呼叫你需要的頁面。"); btn = (Button)this.findViewById(R.id.testbtn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String directory = MainActivity.this.getFilesDir().getAbsolutePath(); String url = "http://www.sohu.com/";

相關推薦

android 如何自身應用解除安裝

   前段時間有個同事問我android應用在解除安裝以後,如何能夠通知一下伺服器,讓使用者填寫一下解除安裝的原因,以求為將來的應用修改積累資料。當時他是有段原始碼的,但是有點小問題,我只是幫他定位一下了程式碼的問題,具體細節沒有研究。又加上最近工作比較繁忙,所以就放下來了,今天稍微有點空,就自己

Android應用如何自己是否解除安裝解除安裝反饋功能的實現(第二版)

原文地址為: Android應用如何監聽自己是否被解除安裝及解除安裝反饋功能的實現(第二版)   昨天發了一篇有關監聽自己是否被解除安裝和解除安裝反饋功能實現的部落格,地址如下:http://www.cnblogs.com/zealotrouge/p/3157126.html,發出去後收

Android應用如何自己是否解除安裝解除安裝反饋功能的實現

  一個應用被使用者解除安裝肯定是有理由的,而開發者卻未必能得知這一重要的理由,畢竟使用者很少會主動反饋建議,多半就是用得不爽就卸,如果能在被解除安裝後獲取到使用者的一些反饋,那對開發者進一步改進應用是非常有利的。目前據我所知,國內的Android應用中實現這一功能的只有360手機衛士、360平板衛士,那麼如

Android應用如何自己是否解除安裝解除安裝反饋功能的實現(第三版)

1 /* 標頭檔案begin */ 2 #include "main_activity_UninstalledObserverActivity.h" 3 /* 標頭檔案end */ 4 5 #ifdef __cplusplus 6 extern "C" 7 { 8 #en

Android 主程序

當按多工鍵時,然後清除所有程式或者殺死單個程式時,如果要監聽這個動作的話,可以在一個service裡監聽。 效果如下: 可以看到,在多工視窗中,左滑結束程序和清除所有程序後,都會自己再開啟應用,程式碼如下: public class KeepLifeService

android當前應用

一.監聽執行緒類: package com.example.lxb.topapp70; import android.content.Intent; import android.os.Build; import android.provider.Settings; im

Android APP自己解除安裝以及解除安裝後的邏輯處理

兩個月前發了兩篇有關監聽自己是否被解除安裝和解除安裝反饋功能實現的部落格,第二版的地址如下:http://www.cnblogs.com/zealotrouge/p/3159772.html,感謝@whiletrue_童鞋發現了我的程式碼在4.2.2系統上無法實現解除安裝反饋,經過除錯,有了問題的解決方案

ReactNative Android返回鍵,在某個頁面返回鍵退出應用

在之前專案中,在進行返回鍵退出應用時,應用的程式碼如下: componentWillMount() { if (Platform.OS === 'android') { BackHandler.addEventListener('hardwa

【實測通過】win10應用商店解除安裝後如何重新安裝

之前手賤解除安裝了,想修改桌面主題都不行,網上方法的程式碼有點小bug,請參考下面的方法。準備如下程式碼(引號內部是你自己的appxmanifest.xml檔案位置)add-appxpackage -register "C:\Program Files\WindowsApps

Android如何第三方應用的啟動

個人總結的監聽第三方應用啟動的方法有以下幾種: 1.Root狀態下Shell監聽ActivityManager的log,或者ps程序 2.參考程式鎖的實現,監聽後臺執行的程序 3.深入framework,通過反射等方式注入hook 第一種方式監聽應用的啟動,restart

Android 利用FileProvider安裝apk一定要宣告許可權,避免當成未知應用阻止安裝

首先看看我們利用FileProvider來安裝apk的常規操作 /** * 通過隱式意圖呼叫系統安裝程式安裝APK */ public void install(Context conte

Android 廣播autoLauch 防止啟動頁面多次啟動(筆記)

直接上程式碼: 1.監聽USB插入的廣播,這個廣播自己插入android收usb是觸發,當然我是監聽自定義廣播。 看下面manifest 配置,: <?xml version="1.0" e

Android APP進入後臺或切換到前臺方案對比

api 5.0 等等 推薦一個 情況 lis 需要 推出 soc 在我們開發的過程中,經常會遇到需要我們判斷app進入後臺,或者切換到前臺的情況。比如我們想判斷app切換到前臺時,顯示一個解鎖界面,要求用戶輸入解鎖密碼才能繼續進行操作;我們想判斷app切換到後臺,記錄一下l

Android 屏幕喚醒和關閉的廣播

n) 應用 dma 今天 new and androidm receive err 今天希望應用程序的服務運行時,可以監聽到屏幕的喚醒。繼續百度學習法,連同監聽閉幕關閉也一同學習了。 此種情況需要動態註冊系統廣播。在AndroidManifest.xml中靜態註冊

Android 屏幕鎖屏&用戶解鎖

clas 開始 ets adc spa contex screen context scree 在做視頻播放器的時候,遇到一個問題,在用戶播放視頻然後鎖屏之後,視頻播放器仍然在繼續播放,遇到類似手機系統狀態改變的問題的時候,首先想到了廣播,下面做個總結: public

Android 文件夾

external 分享 tex xtend 目錄 nac 觸發 改變 @override 在一次Android和pc端的通訊過程中,我們放棄了adb forward來實現socket通訊。而是使用adb push文件,我監聽文件夾... 都學習一下很有必要 本篇簡單Andr

Android藍芽耳機的按鍵事件 藍芽無法響應KeyEvent不到

需求:藍芽耳機的按鍵事件,暫停/播放 音訊/視訊 ,無法響應藍芽KeyEvent的事件 此問題是由於中的藍芽KeyEvent監聽不到導致的,可以通過以下方法監聽藍芽按鍵事件    private MediaSession mSession;  &

FiddlerJava應用程式http請求方法(Configure a Java Application to Use Fiddler)

Fiddler官網:http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureJavaApp Configure a Java Application to Use Fiddler 要配置Java應用程式以向Fiddle

android 元件構建完成

//有時候要獲取一個元件的位置總是返回0,原因是元件還沒繪製完成,該方法就是等待元件構建完成回撥 mView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

android虛擬按鍵的顯示與隱藏

虛擬按鍵在華為手機中大量存在,而虛擬按鍵的存在無疑增加了螢幕適配的難度,往往許多時候我們的介面需要根據虛擬按鍵的顯示與否(虛擬按鍵的顯示隱藏是使用者可以動態調整的)來調整介面的ui顯示,但android系統本身(似乎)並沒有提供此類介面(PS:反正我沒找到類似介面),經過研究得到一個可用的方式。 a