1

В качестве меры безопасности я хотел бы получить список приложений, которые не установлены в Play Маркете. Есть ли способ сделать это?Android получает список приложений для не Play Store

packageManager содержит метод getInstalledApplications, но я не знаю, какие флаги добавить для получения списка. Любая помощь будет оценена по достоинству.

Редактировать: Вот пример кода ответа v4_adi.

public static List<String> getAppsFromUnknownSources(Context context) 
{ 
    List<String> apps = new ArrayList<>(); 
    PackageManager packageManager = context.getPackageManager(); 
    List<PackageInfo> packList = packageManager.getInstalledPackages(0); 
    for (int i = 0; i < packList.size(); i++) 
    { 
    PackageInfo packInfo = packList.get(i); 
    if (packageManager.getInstallerPackageName(packInfo.packageName) == null) 
    { 
     apps.add(packInfo.packageName); 
    } 
    } 

    return apps; 
} 

Это хорошее начало, но это также возвращает много от предварительно установленных приложений Android и Samsung. Есть ли способ удалить их из списка? Я только хочу, чтобы установленные пользователем приложения были из неизвестных источников.

+0

, если проблема не будет решена. Отметьте ответ, который решил вашу проблему как принятую. –

ответ

0

Первоначально я думал, что это будет достаточно, чтобы получить приложения, которые не были установлены с помощью Google Play Store. Позже я обнаружил, что мне также необходимо отфильтровать предустановленные системные приложения. я нашел последнюю часть головоломки в другом посте: Get list of Non System Applications

public static List<String> getAppsFromUnknownSources(Context context) 
{ 
    List<String> apps = new ArrayList<>(); 
    PackageManager packageManager = context.getPackageManager(); 
    List<PackageInfo> packList = packageManager.getInstalledPackages(0); 
    for (int i = 0; i < packList.size(); i++) 
    { 
    PackageInfo packInfo = packList.get(i); 
    boolean hasEmptyInstallerPackageName = packageManager 
      .getInstallerPackageName(packageInfo.packageName) == null; 
    boolean isUserInstalledApp = (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0; 

    if (hasEmptyInstallerPackageName && isUserInstalledApp) 
    { 
     apps.add(packInfo.packageName); 
    } 
    } 

    return apps; 
} 
2

У этой ссылки есть ответ на ваш вопрос. Класс PackageManager поставляет метод getInstallerPackageName, который укажет вам имя пакета для любого установленного вами пакета. Боковые приложения не будут содержать значения.

How to know an application is installed from google play or side-load?

Смежные вопросы