最近有個需求需要獲取手機內(nèi)所有應(yīng)用的包名宙橱,應(yīng)用名,應(yīng)用圖標(biāo)蘸拔,應(yīng)用第一次安裝時間以及最后一次更新時間师郑。還有手機的廠商调窍,型號以及Android系統(tǒng)版本號。在網(wǎng)上搜索了一下邓萨,自己驗證了一波,在此做個記錄缔恳。
獲取手機內(nèi)所有應(yīng)用的包名宝剖,應(yīng)用名,應(yīng)用圖標(biāo)等信息
public class ApkTool {
public static List<MyAppInfo> mLocalInstallApps = null;
public static List<MyAppInfo> scanLocalInstallAppList(PackageManager packageManager) {
List<MyAppInfo> myAppInfos = new ArrayList<MyAppInfo>();
try {
List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
for (int i = 0; i < packageInfos.size(); i++) {
PackageInfo packageInfo = packageInfos.get(i);
long firstInstallTime = packageInfo.firstInstallTime;// 應(yīng)用第一次安裝的時間
int versionCode = packageInfo.versionCode;// 應(yīng)用現(xiàn)在的版本號
String versionName = packageInfo.versionName;// 應(yīng)用現(xiàn)在的版本名稱
long lastUpdateTime = packageInfo.lastUpdateTime;// 最后一次更新時間
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Log.e("Steven", "firstInstallTime=" + format.format(firstInstallTime) +
",versionCode=" + versionCode + ",versionName=" + versionName + ",
最后更新時間=" + format.format(lastUpdateTime));
//如下可獲得更多信息
ApplicationInfo applicationInfo = packageInfo.applicationInfo;
String name = applicationInfo.name;// Application類名
String packageName = applicationInfo.packageName;// 包名
String applicationName =
(String) packageManager.getApplicationLabel(applicationInfo);
Log.e("Steven", "ApkTool.scanLocalInstallAppList:" + "應(yīng)用名:" + applicationName + ",包名:" + packageName);
//過濾掉系統(tǒng)app
if ((ApplicationInfo.FLAG_SYSTEM & packageInfo.applicationInfo.flags) != 0) {
continue;
}
MyAppInfo myAppInfo = new MyAppInfo();
myAppInfo.setAppName(packageInfo.packageName);
if (packageInfo.applicationInfo.loadIcon(packageManager) == null) {
continue;
}
myAppInfo.setImage(packageInfo.applicationInfo.loadIcon(packageManager));
myAppInfos.add(myAppInfo);
}
} catch (Exception e) {
Log.e("Steven", "===============獲取應(yīng)用包信息失敗");
}
return myAppInfos;
}
}
掃描方法需要放在子線程中執(zhí)行万细。
new Thread(){
@Override
public void run() {
super.run();
// 掃描得到APP列表
final List<MyAppInfo> appInfos = ApkTool.scanLocalInstallAppList(MainActivity.this.getPackageManager());
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
// 如果需要更新UI 回到主線程中進行處理
}
});
}
}.start();
獲取手機的廠商纸泄、型號赖钞、Android系統(tǒng)版本號腰素、IMEI(6.0系統(tǒng)以上需要手動獲取權(quán)限)、當(dāng)前系統(tǒng)語言
public class SystemUtil {
/**
* 獲取當(dāng)前手機系統(tǒng)語言仁烹。
*
* @return 返回當(dāng)前系統(tǒng)語言耸弄。例如:當(dāng)前設(shè)置的是“中文-中國”卓缰,則返回“zh-CN”
*/
public static String getSystemLanguage() {
return Locale.getDefault().getLanguage();
}
/**
* 獲取當(dāng)前系統(tǒng)上的語言列表(Locale列表)
*
* @return 語言列表
*/
public static Locale[] getSystemLanguageList() {
return Locale.getAvailableLocales();
}
/**
* 獲取當(dāng)前手機系統(tǒng)版本號
*
* @return 系統(tǒng)版本號
*/
public static String getSystemVersion() {
return android.os.Build.VERSION.RELEASE;
}
/**
* 獲取手機型號
*
* @return 手機型號
*/
public static String getSystemModel() {
return android.os.Build.MODEL;
}
/**
* 獲取手機廠商
*
* @return 手機廠商
*/
public static String getDeviceBrand() {
return android.os.Build.BRAND;
}
/**
* 獲取手機IMEI(需要“android.permission.READ_PHONE_STATE”權(quán)限)
*
* @return 手機IMEI
*/
public static String getIMEI(Context ctx) {
TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Activity.TELEPHONY_SERVICE);
if (tm != null) {
return tm.getDeviceId();
}
return null;
}
}