Как я могу узнать что приложение было установлено, не используя android.permission.QUERY_ALL_PACKAGES?

Обычно для получения информации о приложениях, установленных на устройстве, требуется использование разрешения android.permission.QUERY_ALL_PACKAGES, чтобы получить полный список установленных приложений.

Однако, начиная с Android 11, это разрешение стало привилегированным и требует предварительного получения пользователем. Таким образом, если вы не хотите запрашивать у пользователя данное разрешение, то есть несколько альтернативных путей, которые могут помочь вам получить информацию о установленных приложениях.

1. Использование пакетного менеджера:

   PackageManager packageManager = getPackageManager();
   List<ApplicationInfo> installedApps = packageManager.getInstalledApplications(0);
   for (ApplicationInfo appInfo : installedApps) {
       // обрабатываем информацию о каждом приложении
   }

Этот код позволяет получить список всех установленных приложений без использования разрешения QUERY_ALL_PACKAGES. Однако, следует отметить, что полученная информация будет ограничена только до всех приложений, доступных из контекста вашего приложения.

2. Использование UsageStatsManager:

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
       UsageStatsManager usageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
       long endTime = System.currentTimeMillis();
       long startTime = endTime - 86400000; // за последние 24 часа
       List<UsageStats> usageStatsList = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, startTime, endTime);

       if (usageStatsList != null && !usageStatsList.isEmpty()) {
           for (UsageStats usageStats : usageStatsList) {
               // обрабатываем информацию о каждом приложении
           }
       }
   }

Здесь мы используем UsageStatsManager для получения информации о приложениях, которые пользователь запускал на устройстве. Однако, этот способ требует наличия разрешения android.permission.PACKAGE_USAGE_STATS и активации его пользователем в настройках устройства.

3. Использование AccessibilityService:
Вы также можете использовать AccessibilityService для обнаружения запуска и закрытия приложений других приложений на устройстве. Однако, это требует дополнительной настройки и активации пользователем.

В общем, если вы хотите получить подробную информацию о всех приложениях, установленных на устройстве, из своего приложения без использования QUERY_ALL_PACKAGES, на данный момент нет других способов с достаточной подробностью, чтобы получить информацию обо всех установленных приложениях на Android 11 и выше.