本文為Android的系統信息相關知識整理,具體參考了
- 《Android群英傳》第九章 Android系統信息與安全機制
- 系統信息獲取
獲取系統信息的兩種方式:
-
android.os.Builder,包含系統編譯時的大量設備、配置信息。
- Build.BOARD //主板
- Build.BRAND //Android系統定制商
- Build.PRODUCT //手機產品名
- ...
-
SystemProperty,包含系統配置屬性值和參數。
- os.version //OS版本
- os.name //OS名稱
- user.timezone //時區
- ...
String board = Build.BOARD;
String brand = Build.BRAND;
String os_version = System.getProperty("os.version");
String os_name = Ststem.getProperty("os.version");
系統信息來源,其中包含比函數獲得的多得多的信息:
- Android系統目錄的
system/build.prop
文件。里面包含android.os.Build所獲取的信息。 - Android系統目錄的
proc/
文件夾,里面包含非常多的系統信息。
- 應用信息獲取
2.1 PackageManager
PackageManager,重點在于獲取應用的包信息。這些信息來自AndroidManifest.xml
AndroidManifest.xml的文件內容結構:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.teamir.mendcurse"
android:versionCode="1"
android:versionName="1.0" >
<application
android:name=".AppData"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.teamir.mendcurse.welcome.SplashActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
各個標簽的封裝類:
- mainfest -> PackageInfo
- application -> ApplicationInfo
- activity -> ActivityInfo
- service -> ServiceInfo
簡單用法示例,提取所有應用名。當然也可以新建一個類,存到里面。
//獲取PackageManager對象
pm = this.getPackageManager();
//獲取所有的應用信息
List<ApplicationInfo> listApplications = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES)
List<String> labelList = new ArrayList<String>();
for(ApplicationInfo app:listApplications){
labelList.add((String)app.loadLabel(pm));
}
2.2 ActivityManager
ActivityManager,重點在于獲得在運行的應用程序信息。
ActivityManager封裝的重要的Bean對象:
- ActivityManager.MemoryInfo,全局的內存信息
- availMem,系統可用內存
- totalMem,總內存
- threshold,低內存閾值
- lowMemory,是否處于低內存
- Debug.MemoryInfo,進程下的內存信息
- RunningAppProcessInfo,運行的進程信息
- RunningServiceInfo,運行的服務信息
示例,獲取正在運行過的進程的pid:
ActivityManager mActivityManager =(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> appProcessList = mActivityManager.getRunningAppProcessInfo();
List<Integer> pidList = new ArrayList<Integer>();
for(int i = 0; i < appProcessList.size(); i++){
pidList.add(info.pid);
}