Android获取手机内安装的应用名称,包名,应用图标等信息以及手机厂商,型号,Android系统版本号等

最近有个需求需要获取手机内所有应用的包名,应用名,应用图标,应用第一次安装时间以及最后一次更新时间。还有手机的厂商,型号以及Android系统版本号。在网上搜索了一下,自己验证了一波,在此做个记录。

获取手机内所有应用的包名,应用名,应用图标等信息

public class ApkTool {
    public static List mLocalInstallApps = null;

    public static List scanLocalInstallAppList(PackageManager packageManager) {
        List myAppInfos = new ArrayList();
        try {
            List 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 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;
    }
}

你可能感兴趣的:(Android获取手机内安装的应用名称,包名,应用图标等信息以及手机厂商,型号,Android系统版本号等)