Android上擷取本機安裝的應用程式

來源:互聯網
上載者:User

在google上輸入以上的關鍵字+ android,可以搜到的代碼:

List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);

 

雖然,有些代碼號稱可以過濾掉系統自身的應用程式,但是只要細看代碼就會發現,好像裡面的那個布爾變數沒有起到什麼過濾的作用。

  方法一:通過擷取的安裝包(包括安裝的與系統自身的應用程式),對其android.content.pm.PackageInfo的packageName 進行過濾,

但是Android與google的包比較容易過濾掉,但需要對不同產商進行適配;

  方法二:枚舉 \data\app 檔案夾,其下的*.apk檔案 就是本機安裝的軟體,而\system\App下的*.apk檔案就是系統內建的軟體,

由於普通的程式是無法讀取這兩個檔案夾的,需要root許可權吧,因此該方法也行不通(用File.listFiles() + android.permission.FACTORY_TEST 許可權 還是不能枚舉出檔案)

雖然不能枚舉檔案夾 "\data\app\",但我們可以訪問(read)檔案夾"\data\app\"下的所有檔案,因此可以用如下的方法來擷取本機上已經安裝的軟體(排除系統的應用程式):

PackageManager pckMan = getPackageManager();List<PackageInfo> packs = pckMan.getInstalledPackages(0);count = packs.size();String name;int installedNum = 0;for(int i = 0; i < count; i++) {                 PackageInfo p = packs.get(i); if (p.versionName == null) continue; 
             //判斷該軟體包是否在/data/app目錄下File f1 = new File( "/data/app/" +  p.packageName + ".apk");if(!f1.exists()) continue;installedNum++;/** * 應用程式的名字 */name = p.applicationInfo.loadLabel(pckMan).toString();}

方法三、可以通過uid來過濾系統系統的安裝包,因為android系統中的uid從 1000 ~ 9999 都是給系統程式保留的,所以只要判斷package的uid > 10000即可判定該程式是非系統程式。

if(p.applicationInfo.uid > 10000)   //非系統程式

 

uid是程式在安裝的時候由系統分配的。

 方法四:這個方法應該是最優的。

ApplicationInfo appInfo = p.applicationInfo;    /**     * Value for {@link #flags}: if set, this application is installed in the     * device's system image.     */if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0)    //系統程式else    //不是系統程式

 

------IPHONE------------

1.最近在研究iPhone,發現在iPhone上要達到這樣的功能還挺麻煩的啊:

 http://www.cocoachina.com/bbs/simple/?t86829.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.