最近有个需求需要获取手机内所有应用的包名,应用名,应用图标,应用第一次安装时间以及最后一次更新时间。还有手机的厂商,型号以及Android系统版本号。在网上搜索了一下,自己验证了一波,在此做个记录。
获取手机内所有应用的包名,应用名,应用图标等信息
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;// 应用第一次安装的时间
int versionCode = packageInfo.versionCode;// 应用现在的版本号
String versionName = packageInfo.versionName;// 应用现在的版本名称
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:" + "应用名:" + applicationName + ",包名:" + packageName);
//过滤掉系统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", "===============获取应用包信息失败");
}
return myAppInfos;
}
}
扫描方法需要放在子线程中执行。
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系统版本号、IMEI(6.0系统以上需要手动获取权限)、当前系统语言
public class SystemUtil {
/**
* 获取当前手机系统语言。
*
* @return 返回当前系统语言。例如:当前设置的是“中文-中国”,则返回“zh-CN”
*/
public static String getSystemLanguage() {
return Locale.getDefault().getLanguage();
}
/**
* 获取当前系统上的语言列表(Locale列表)
*
* @return 语言列表
*/
public static Locale[] getSystemLanguageList() {
return Locale.getAvailableLocales();
}
/**
* 获取当前手机系统版本号
*
* @return 系统版本号
*/
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”权限)
*
* @return 手机IMEI
*/
public static String getIMEI(Context ctx) {
TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Activity.TELEPHONY_SERVICE);
if (tm != null) {
return tm.getDeviceId();
}
return null;
}
}
网友评论