获取已安装应用程序的列表(内置程序除外)

时间:2018-06-23 09:35:35

标签: android

我想获取已安装应用程序的列表。但是需要排除默认的内置应用程序。像蓝牙,App库一样。

预先感谢您的帮助

2 个答案:

答案 0 :(得分:0)

使用此方法

private void getApps() {
    List<ApplicationInfo> totallist = getPackageManager().getInstalledApplications(0);
    List<ApplicationInfo> installedlist = new ArrayList<>();
    List<ApplicationInfo> defaultlist = new ArrayList<>();
    for (int i = 0; i < totallist.size(); i++) {
        if ((totallist.get(i).flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
            installedlist.add(totallist.get(i));
        }

        if ((totallist.get(i).flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
            defaultlist.add(totallist.get(i));
        }
    }
    Log.d("totallist apps", String.valueOf(totallist.size()));
    Log.d("installedlist apps", String.valueOf(installedlist.size()));
    Log.d("defaultlist apps", String.valueOf(defaultlist.size()));
}

答案 1 :(得分:0)

非系统应用程序有两种类型:

从Google Play商店下载的应用 制造商在设备中预加载的应用 下面的代码将返回上述所有应用程序的列表:

ArrayList<ApplicationInfo> mAllApp = 
        mPackageManager.getInstalledApplications(PackageManager.GET_META_DATA);

for(int i = 0; i < mAllApp.size(); i++) {
    if((mAllApp.get(i).flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
         // 1. Applications downloaded from Google Play Store
        mAllApp1.add(mAllApp.get(i));
    }

    if((mAllApp.get(i).flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
        // 2. Applications preloaded in device by manufecturer
        mAllApp1.add(mAllApp.get(i));
    }
}