導航:首頁 > 操作系統 > android下載監聽

android下載監聽

發布時間:2025-01-05 16:44:38

『壹』 android程序怎樣監聽自身程序被安裝和卸載

好久不搞android了,我前年寫了個launcher項目,其中也涉及到如何去知道 app 的卸載 和 安裝,我保證就api 是可以實現的。希望樓主不要放棄。我記得當時好像是接受廣播,好像可以間接的拿到系統的app 狀態信息。

『貳』 android如何監聽到程序安裝與卸載的名稱,包名

可以使用java輪詢檢測data下包名是否存在來判斷安裝與卸載

『叄』 android 如何監聽程序安裝完成

  1. android系統中,當應用安裝完成以後會發出一個廣播action的值為android.intent.action.PACKAGE_ADDED。只要監聽這個廣播就可以了。

  2. 監聽方法,創建一個BroadcastReceiver,注冊時添加過濾器,過濾器中添加以上action。

  3. 完成以上步驟,當應用安裝完成後,你的應用就會收到廣播。

『肆』 android通過什麼來監聽應用程序的啟動

在Android中,ActivityManager是一個關鍵組件,它能夠幫助我們了解當前系統中運行的應用程序狀況。通過這個組件,我們可以查詢到所有正在運行的應用程序的信息,包括它們所在的進程ID和進程名。這里提供一個示例代碼,展示如何使用ActivityManager來獲取這些信息。

首先,我們需要創建一個方法來查詢所有已經安裝的應用程序,然後根據包名過濾獲取所有真正運行的應用程序。示例代碼如下:

private List queryAllRunningAppInfo() { pm = this.getPackageManager(); // 查詢所有已經安裝的應用程序 List listAppcations = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES); Collections.sort(listAppcations, new ApplicationInfo.DisplayNameComparator(pm)); // 排序 // 保存所有正在運行的包名 以及它所在的進程信息 Map pgkProcessAppMap = new HashMap(); ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); // 通過調用ActivityManager的getRunningAppProcesses()方法獲得系統里所有正在運行的進程 List appProcessList = mActivityManager .getRunningAppProcesses(); for (ActivityManager.RunningAppProcessInfo appProcess : appProcessList) { int pid = appProcess.pid; // pid String processName = appProcess.processName; // 進程名 Log.i(TAG, "processName: " + processName + " pid: " + pid); String[] pkgNameList = appProcess.pkgList; // 獲得運行在該進程里的所有應用程序包 // 輸出所有應用程序的包名 for (int i = 0; i < pkgNameList.length; i++) { String pkgName = pkgNameList[i]; Log.i(TAG, "packageName " + pkgName + " at index " + i + " in process " + pid); // 加入至map對象里 pgkProcessAppMap.put(pkgName, appProcess); } } // 保存所有正在運行的應用程序信息 List runningAppInfos = new ArrayList(); // 保存過濾查到的AppInfo for (ApplicationInfo app : listAppcations) { // 如果該包名存在 則構造一個RunningAppInfo對象 if (pgkProcessAppMap.containsKey(app.packageName)) { // 獲得該packageName的 pid 和 processName int pid = pgkProcessAppMap.get(app.packageName).pid; String processName = pgkProcessAppMap.get(app.packageName).processName; runningAppInfos.add(getAppInfo(app, pid, processName)); } } return runningAppInfos; }

此代碼片段展示了如何利用ActivityManager獲取應用程序的運行狀態信息。通過這種方式,開發者可以更好地管理和監控應用程序的運行情況。

在實際應用中,通過監聽ActivityManager提供的信息,可以實現對應用程序啟動的監聽。開發者可以根據需要自定義監聽邏輯,例如在應用程序啟動時執行特定的操作,或者實時監控應用程序的運行狀態。

需要注意的是,獲取應用程序的運行狀態信息需要相應的許可權,開發者在開發過程中需要確保應用程序具有相應的許可權配置。

總結來說,Android中通過ActivityManager來監聽應用程序的啟動,為開發者提供了一種有效的方式,以便更好地管理和監控應用程序的運行狀況。

『伍』 Android IActivityController實現app啟動監聽

IActivityController.aidl是系統自帶的aidl,在Am的內部類MyActivityController有實現這個aidl介面,主要用於app狀態監聽控制。對於應用開發者來說,此介面為給我們提供了各種可能性,比如統計每個app啟動次數,crash次數等。這里我們先看下他的方法:

在項目java文件下創建一個包名為android.app,然後把一下文件粘貼進去

接下來需要新建一個代理類 繼承IActivityController.Stub

通過反射設置代理類

借鑒文章

『陸』 Android應用如何監聽自己是否被卸載及卸載反

1,注冊BroadcastReceiver,監聽"android.intent.action.PACKAGE_REMOVED"系統廣播

結果:NO。未寫代碼,直接分析,卸載的第一步就是退出當前應用的主進程,而此廣播是在已經卸載完成後才發出的,此時主進程都沒有了,去哪onReceive()呢?

2,若能收到"將要卸載XX包"的系統廣播,在主進程被退出之前就搶先進行反饋處理就好了,可惜沒有這樣的系統廣播,不過經過調研,倒是發現了一個辦法,讀取系統log,當日誌中包含"android.intent.action.DELETE"和自己的包名時,意味著自己將要被卸載。

結果:NO。調試時發現此方法有兩個缺陷,(1)點擊設置中的卸載按鈕即發出此Intent,此時用戶尚未在彈框中確認卸載;(2)pm命令卸載不出發此Intent,意味著被諸如手機安全管家,豌豆莢等軟體卸載時,無法提前得知卸載意圖。

3,由於時間點不容易把控,所以乾脆不依賴系統廣播或log,考慮到卸載過程會刪除"/data/data/包名"目錄,我們可以用線程直接輪詢這個目錄是否存在,以此為依據判斷自己是否被卸載。

結果:NO。同方法1,主進程退出,相應的線程必定退出,線程還沒等到判斷目錄是否存在就已經被銷毀了。

4,改用C端進程輪詢"/data/data/包名"目錄是否存在

結果:YES。藉助Java端進程fork出來的C端進程在應用被卸載後不會被銷毀。

二 方案

Android自API1就有的一個類FileObserver,這個類用於監聽某個文件的變化狀態,如果是目錄,這個類還可以監聽其子目錄及子目錄文件的變化狀態,通過閱讀FileObserver源碼,發現其實現利用了Linux內核中一個重要的機制inotify,它是一個內核用於通知用戶空間程序文件系統變化的機制,詳情可參考http://en.wikipedia.org/wiki/Inotify,裡面對inotify有比較詳細的說明。

使用inotify的好處就在於不需要每1s的輪詢,這樣就不會無謂地消耗系統資源,使用inotify時會用read()方法阻塞進程,直到收到IN_DELETE通知,此時進程重新被喚醒,執行反饋處理流程。

三方案

阻塞結束後,通過調用exec函數發出am命令調起瀏覽器訪問網頁,在API16(Android 4.1.x)的設備上尚可正常訪問網頁,而API17(Android 4.2.x)的設備上連瀏覽器也不能調起。解決方案:增加處理分支,若API>=17,將userSerialNumber傳遞給C端進程,然後在am命令中帶上參數--user userSerialNumber即可

『柒』 Android 能不能監聽到第三方應用App的啟動和退出

可以,我原來做的是用一個計時器(為了准確率可以0.1s輪詢一次)去監聽手機的TopActivity,獲取TopActivity的包名(應用的包名是唯一的),當TopActivity發生變化就說明使用的應用發生了改變,就實現了監聽第三方應用的啟動和退出(其中也包括系統應用,過濾包名就可以了)。有什麼問題再問我

閱讀全文

與android下載監聽相關的資料

熱點內容
gitlab需要什麼配置伺服器 瀏覽:238
怎樣設置文件夾不被封 瀏覽:455
伺服器管理口是干什麼的 瀏覽:655
java對齊輸出右對齊 瀏覽:912
android獲取應用程序大小 瀏覽:11
javac通信 瀏覽:910
單獨開啟資源管理器的命令是 瀏覽:562
python安卓模擬器 瀏覽:47
pdf閱讀器android 瀏覽:169
酒店信息管理系統源碼 瀏覽:307
php實現blob加密視頻 瀏覽:383
比澤爾二手壓縮機 瀏覽:612
層級遍歷演算法復雜度 瀏覽:296
單片機課設致謝 瀏覽:906
農行app我的賬戶在哪裡 瀏覽:47
單片機頻率計數器 瀏覽:532
蘋果如何與安卓傳輸 瀏覽:145
如何解壓聲音大 瀏覽:893
手機刷入加密門卡 瀏覽:919
交換原理與技術pdf 瀏覽:274