Android ApplicationInfo 應(yīng)用程序信息的詳解
Android ApplicationInfo 應(yīng)用程序信息
1、簡(jiǎn)述
1 ApplicationInfo是android.content.pm包下的一個(gè)實(shí)體類,用于封裝應(yīng)用的信息,flags是其中的一個(gè)成員變量public int flags = 0;用于保存應(yīng)用的標(biāo)志信息。 2 ApplicationInfo 通過(guò)它可以得到一個(gè)應(yīng)用基本信息。 這些信息是從AndroidManifest.xml的< application >標(biāo)簽獲取的 3 ApplicationInfo對(duì)象里保存的信息都是<application>標(biāo)簽里的屬性值 4 ApplicationInfo與ResolveInfo比較:前者能夠得到Icon、Label、meta-data、description。后者只能得到Icon、Label
2、獲取ApplicationInfo
2.1 、獲取手機(jī)上安裝所有程序?qū)?yīng)的 ApplicationInfo
/** * 獲取手機(jī)上安裝的所有的程序?qū)?yīng)的 ApplicationInfo * 它是通過(guò)解析AndroidManifest.xml的< application>標(biāo)簽中得到的,所以它能得到所有的app * * 獲取手機(jī)上的所有的安裝的應(yīng)用程序信息 * 參數(shù)為 標(biāo)識(shí) 一般為 PackageManager.GET_UNINSTALLED_PACKAGES */ List<ApplicationInfo> list = packageManager.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
2.2 、獲取指定包名對(duì)應(yīng)的 ApplicationInfo
/** * 獲取指定應(yīng)用程序 ApplicationInfo * 參數(shù)一對(duì)應(yīng)應(yīng)用程序的包名 * 參數(shù)二 應(yīng)用程序?qū)?yīng)的標(biāo)識(shí) 通常為 0 */ ApplicationInfo applicationInfo = packageManager.getApplicationInfo("com.androidlongs.contactsapplication", 0);
3、通過(guò)ApplicationInfo來(lái)獲取應(yīng)用程序的 基本信息
3.1 、獲取應(yīng)用程序?qū)?yīng)的包名、應(yīng)用名稱
//獲取應(yīng)用圖標(biāo) Drawable drawable = applicationInfo.loadIcon(packageManager); //獲取應(yīng)用程序的 包名 String appPackageName = applicationInfo.packageName; //獲取應(yīng)用名 //參數(shù) packageManager 是應(yīng)用管理者對(duì)象 String appName =applicationInfo.loadLabel(packageManager).toString();
3.2 、獲取應(yīng)用程序?qū)?yīng)數(shù)據(jù)的目錄以及占用的空間大小
//獲取應(yīng)用存放數(shù)據(jù)目錄 String dir = applicationInfo.sourceDir; Log.d("app ","應(yīng)用存放數(shù)據(jù)目錄 " +dir); //獲取應(yīng)用數(shù)據(jù)大小 ong length = new File(dir).length(); //轉(zhuǎn)換為 M float size = length*1f/1024/1024; Log.d("app ","應(yīng)用數(shù)據(jù)大小 " +length+"\t"+size);
3.3 、判斷是否安裝在外置儲(chǔ)存空間存
//判斷是否安裝在外存 int flags = applicationInfo.flags; if((flags&ApplicationInfo.FLAG_EXTERNAL_STORAGE)==ApplicationInfo.FLAG_EXTERNAL_STORAGE){ Log.d("app "," 安裝在 外置存儲(chǔ)空間 "); }else { Log.d("app "," 安裝在 內(nèi)置存儲(chǔ)空間 "); }
3.4 、判斷應(yīng)用程序是否是系統(tǒng)應(yīng)用
//判斷是否是系統(tǒng)應(yīng)用 if((flags&ApplicationInfo.FLAG_SYSTEM)==ApplicationInfo.FLAG_SYSTEM){ Log.d("app "," 是系統(tǒng)應(yīng)用 "); }else{ Log.d("app "," 不是系統(tǒng)應(yīng)用 "); }
3.5 、manageSpaceActivityName
/** * 從”android:manageSpaceActivity“屬性得到 * 用于指定一個(gè)Activity來(lái)管理數(shù)據(jù), * 它最終會(huì)出現(xiàn)在設(shè)置->應(yīng)用程序管理中, * 默認(rèn)為按鈕為”清除數(shù)據(jù)”,指定此屬性后,該按鈕可點(diǎn)擊跳轉(zhuǎn)到該Activity, 讓用戶選擇性清除哪些數(shù)據(jù)。若不設(shè)置則為null. */ String activityName = applicationInfo.manageSpaceActivityName; Log.i("applicationInfo", "activityName: " + activityName);
3.6 、獲取應(yīng)用程序運(yùn)行的進(jìn)程
/** * 從”android:process“屬性得到,注明應(yīng)用運(yùn)行的進(jìn)程名?;虿辉O(shè)置則默認(rèn)為應(yīng)用包名。 */ String processName = applicationInfo.processName; Log.i("applicationInfo", "processName: " + processName);
3.7 、其他配置信息簡(jiǎn)述
// 配置文件中的android:backupAgent屬性值,用于備份 String backupAgentName = applicationInfo.backupAgentName; Log.i("applicationInfo", "backupAgentName: " + backupAgentName); // 獲取繼承Application類的對(duì)象,維護(hù)全局的Application狀態(tài) //但一般都不用繼承的方式,可以通過(guò)Context.getApplicationContext()方法得到 String className = applicationInfo.className; Log.i("applicationInfo", "className: " + className); /** * 可選項(xiàng),訪問(wèn)當(dāng)前應(yīng)用所有組件需要聲明的權(quán)限,從”android:permission“屬性得到。 */ String permisson = applicationInfo.permission; Log.i("applicationInfo", "permisson: " + permisson); // 創(chuàng)建對(duì)象時(shí),傳入的是GET_SHARED_LIBRARY_FILES該屬性才有值 String[] files = applicationInfo.sharedLibraryFiles; Log.i("applicationInfo", "files: " + files); // 存放數(shù)據(jù)的路徑 應(yīng)用數(shù)據(jù)目錄。 String dataPath = applicationInfo.dataDir; Log.i("applicationInfo", "dataPath: " + dataPath); // 本地路徑 JNI本地庫(kù)存放路徑。 String nativePath = applicationInfo.nativeLibraryDir; Log.i("applicationInfo", "nativePath:" + nativePath); // 公共資源路徑 String punlicSourcePath = applicationInfo.publicSourceDir; Log.i("applicationInfo", "punlicSourcePath: " + punlicSourcePath); // 資源路徑 應(yīng)用APK的全路徑 String sourcePath = applicationInfo.sourceDir; Log.i("applicationInfo", "sourcePath: " + sourcePath); /** * 當(dāng)前應(yīng)用所有Activity的默認(rèn)task密切性。 * 可以參考ActivityInfo的taskAffinity,從”android:taskAffinity“屬性得到。 * 具體taskAffinity是怎么影響到Activity在task的啟動(dòng), 后面會(huì)在Activity啟動(dòng)模式中細(xì)講 */ String taskAffinity = applicationInfo.taskAffinity; Log.i("applicationInfo", "taskAffinity: " + taskAffinity); // 如果是false,代表application里的所有組件都禁用 boolean enable = applicationInfo.enabled; Log.i("applicationInfo", "enable: " + enable); // 表述資源文件的標(biāo)識(shí) int descriRes = applicationInfo.descriptionRes; Log.i("applicationInfo", "descriRes: " + descriRes); int flag = applicationInfo.flags; Log.i("applicationInfo", "flag: " + flag); // 指定smallest screen width的值,超過(guò)這個(gè)值,就要開(kāi)啟屏幕兼容 int compatibleWidth = applicationInfo.compatibleWidthLimitDp;//android:compatibleWidthLimitDp屬性 Log.i("applicationInfo", "compatibleWidth: " + compatibleWidth); // 同上,只是這時(shí)候用戶無(wú)法禁止屏幕兼容模式,說(shuō)明是強(qiáng)制啟動(dòng)屏幕兼容 int largestWidth = applicationInfo.largestWidthLimitDp;//android:largestWidthLimitDp屬性 Log.i("applicationInfo", "largestWidth: " + largestWidth); // 所需屏幕空間的最短尺寸, int samllestWidth = applicationInfo.requiresSmallestWidthDp;//android:requiresSmallestWidthDp屬性 Log.i("applicationInfo", "samllestWidth: " + samllestWidth); // 應(yīng)用所需的最小sdk版本 int sdkVersion = applicationInfo.targetSdkVersion; Log.i("applicationInfo", "sdkVersion: " + sdkVersion); int theme = applicationInfo.theme; Log.i("applicationInfo", "theme: " + theme);//android:theme= int uid = applicationInfo.uid; Log.i("applicationInfo", "uid: " + uid); // 配置文件中的uiOptions屬性的值 int uiOptions = applicationInfo.uiOptions; Log.i("applicationInfo", "uiOptions: " + uiOptions);
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Android獲取apk程序簽名信息代碼示例
- Android實(shí)現(xiàn)獲取應(yīng)用程序相關(guān)信息列表的方法
- Android開(kāi)發(fā)之在程序中時(shí)時(shí)獲取logcat日志信息的方法(附demo源碼下載)
- 如何判斷軟件程序是否聯(lián)網(wǎng) 聯(lián)網(wǎng)狀態(tài)提示信息Android實(shí)現(xiàn)
- Android實(shí)現(xiàn)整理PackageManager獲取所有安裝程序信息
- Android編程實(shí)現(xiàn)捕獲程序異常退出時(shí)的錯(cuò)誤log信息功能詳解
- Android編程獲取APP應(yīng)用程序基本信息輔助類【APP名稱、包名、圖標(biāo),版本號(hào)等】
- Android獲取手機(jī)型號(hào)/系統(tǒng)版本號(hào)/App版本號(hào)等信息實(shí)例講解
- Android開(kāi)發(fā)獲取系統(tǒng)中已安裝程序信息的方法
相關(guān)文章
Android開(kāi)發(fā)筆記之:消息循環(huán)與Looper的詳解
本篇文章是對(duì)Android中消息循環(huán)與Looper的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Android實(shí)現(xiàn)懸浮可拖拽的Button
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)懸浮可拖拽的Button,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Android 中WallpaperManager用法實(shí)例
這篇文章主要介紹了Android 中WallpaperManager用法實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-09-09Android React-Native通信數(shù)據(jù)模型分析
這篇文章主要介紹了Android React-Native通信數(shù)據(jù)模型分析的相關(guān)資料,需要的朋友可以參考下2016-10-10Android SQLite數(shù)據(jù)庫(kù)版本升級(jí)的管理實(shí)現(xiàn)
這篇文章主要介紹了Android SQLite數(shù)據(jù)庫(kù)版本升級(jí)的管理實(shí)現(xiàn)的相關(guān)資料,這里提供實(shí)現(xiàn)代碼幫助大家掌握這部分內(nèi)容,需要的朋友可以參考下2017-09-09Flutter實(shí)現(xiàn)資源下載斷點(diǎn)續(xù)傳的示例代碼
在項(xiàng)目開(kāi)發(fā)中,特別是C端的產(chǎn)品,資源下載實(shí)現(xiàn)斷點(diǎn)續(xù)傳是非常有必要的。今天我們不講過(guò)多原理的知識(shí),分享下簡(jiǎn)單實(shí)用的資源斷點(diǎn)續(xù)傳2022-07-07Android自定義滑動(dòng)刪除效果的實(shí)現(xiàn)代碼
這篇文章將從現(xiàn)有 Android 滑動(dòng)刪除的痛點(diǎn),到搭建好一個(gè)基本的框架,到最終提供一份完整的 Demo為止,爭(zhēng)取為讀者提供最大的可定制化,需要的朋友可以參考下2018-03-03Android從xml加載到View對(duì)象過(guò)程解析
這篇文章主要介紹了 Android從xml加載到View對(duì)象過(guò)程解析的相關(guān)資料,需要的朋友可以參考下2016-03-03Android自定義View實(shí)現(xiàn)圓形環(huán)繞效果
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)圓形環(huán)繞效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01