編輯:關於Android編程
在google上輸入以上的關鍵字+ android,可以搜到的代碼
List
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方法三、可以通過uid來過濾系統系統的安裝包,因為android系統中的uid從 1000 ~ 9999 都是給系統程序保留的,所以只要判斷package的uid > 10000即可判定該程序是非系統程序。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;
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 //不是系統程序
1.背景所謂外部數據庫文件此處指的就是一個在外部單獨創建的db文件,假設有這麼一個場景,我們項目中有一些本地數據,不需要接口去獲取的(不需要進行網絡操作),寫死的數據,比
提煉接口重構是從一個已存在的類中提煉接口,它可以從某個類中選擇方法,把選中的方法提取到一個單獨的接口中.操作步驟:? 菜單欄: Refactor —>
華為手機基於Android打造了EMUI系統,目前最新版本是EMUI 4.1,版本是Android 6.0。據荷蘭媒體報道,他們從產業鏈獲悉,華為正在秘研E
顧名思義,AndroidEventBus ( github鏈接 : https://github.com/bboyfeiyu/AndroidEventBus