Android all application list

Получение списка приложений в Android

Android SDK предоставляет много средств для работы с системой. В том числе он позволяет получать список приложений, которые установлены на устройстве. Это может быть полезно, когда нужно получить сведения о сторонних приложениях (размер APK, путь до приложения, имя пакета и т.д.). Например, в наших приложениях получение списка, содержащего сторонние приложения, играет большую роль: в GreenBro с помощью этого списка выводятся сведения о приложениях, а также выполняются различные действия.

В Менеджере системных приложений и APK Extractor же список приложений необходим, чтобы удалять приложения и извлекать APK из приложений соответственно.

В этой статье мы рассмотрим, как можно получать список приложений, установленных на устройстве, а также как происходит установка приложений на устройство.

Класс PackageManager

PackageManager предоставляет API, который фактически управляет установкой, удалением и обновлением приложений. Когда мы устанавливаем файл APK, PackageManager анализирует этот APK и выводит результат.

Получить экземпляр класса PackageManager можно с помощью метода getPackageManager(). PackageManager предоставляет методы для запросов к установленным пакетам и соответствующим разрешениям.

Где хранятся файлы APK на Android?

В зависимости от типа данных, на Androiid файлы могут храниться в следующих местах:

  • Предустановленные и системные приложения (Камера, Браузер и т.д.) хранятся в /system/app/
  • Установленные пользователем приложения хранятся в /data/app/
  • PackageManager создаёт каталог /data/data/ / для хранения базы данных, файлов с предпочтениями, нативных библиотек и кеша.

Как PackageManager хранит информацию о приложении?

Менеджер пакетов хранит информацию о приложении в трёх файлах, расположенных в /data/system.

packages.xml

Этот XML-файл содержит список разрешений и пакеты\приложения. Он хранит две вещи: разрешения и пакет. Например:

Разрешения хранятся в теге

. Каждое разрешение имеет три атрибута: name, package и protection. Атрибут name это имя разрешения, которое мы используем в AndroidManifest.xml. Атрибут package указывает на пакет, которому принадлежит разрешение, в большинстве случаев это «android». Атрибут protection указывает на уровень безопасности.

содержит 10 атрибутов и несколько подтегов.

Атрибут Описание
name Имя пакета
codePath Путь установки APK
nativeLibraryPath Нативная библиотека, расположенная по умолчанию в /data/data/ /lib
flag Хранит флаги ApplicationInfo
ft Время в шестнадцатtричном формате
lt Время установки в шестнадцатеричном формате
ut Время последнего обновления в шестнадцатеричном формате
version Код версии из AndroidManifest.xml
sharedUserId Идентификатор пользователя Linux, который будет использоваться совместно с другими приложениями.
userId Идентификатор пользователя Linux

Подтеги же здесь следующие:

  • представляет собой информацию о сигнатуре, атрибут count — количество тегов .
  • это ключ сертификата, атрибут index представляет собой глобальный индекс сертификата.

содержат разрешения, которые разработчик установил в AndroidManifest.xml

packages.list

Это простой текстовый файл, содержащий имя пакета, идентификатор пользователя, флаги и каталог data.

package-stopped.xml

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

Получаем список приложений

Рассмотрим получение списка установленных приложений на примере GreenBro.

При запуске приложения запускается AsyncTask, внутри которого получаем экземпляр PackageManager и затем копируем в список List все данные об установленных приложениях.

Метод getInstalledApplications() принимает в качестве параметра флаг GET_META_DATA, который определяет, что нам нужные метаданные каждого пакета.

Результатом является список объектов ApplicationInfo для каждого установленного приложения. Класс ApplicationInfo предоставляет подробную информацию о пакете, собранную из тега в AndroidManifest.xml, нам оттуда нужны лишь самые важные данные.

Поэтому в цикле проверяем каждый объект из полученного списка и записывать данные в собственный класс AppInfo, чтобы затем использовать в основном потоке.

Здесь с помощью метода getPackageInfo() класса PackageManager мы получаем общую информацию о приложении по заданному имени пакета. После эта информация объединяется с информацией, полученной от getInstalledApplications() и сохраняется в объекте AppInfo со следующими полями:

  • title — название приложения
  • packageName — имя пакета
  • sourceDir — полный путь до APK приложения
  • publicSourceDir — путь до общедоступных частей sourceDir
  • versionName — имя версии
  • isSystem — определяет, является ли приложение системным
  • size — размер приложения (в удобной форме)
  • longSize — размер приложения в long
  • dataDir — полный путь к каталогу data
  • nativeLibraryDir — путь до нативных библиотек
  • modified — дата последнего изменения
  • firstInstallTime — дата установки
  • lastUpdateTime — дата последнего обновления
  • enabled — определяет, включено ли приложение

Чтобы узнать название приложения, можно также воспользоваться PackageManager, как показано ниже.

Проверка же на то, является ли приложение системным, тоже достаточно проста и показана ниже.

В конце работы AsyncTask возвращает результат обратно в основной поток. Вот и всё, мы загрузили себе список всех установленных на устройстве приложений и можем продолжить с ним работу.

Получение списка приложений в Android : 4 комментария

Подскажите пожалуйста, в конструкции:
final PackageManager pm = context.getPackageManager();
List apps = new ArrayList();
List packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
Чем является «context»?

Это локальная переменная, Вы можете передавать контекст из активити или фрагмента

» List packages = pm.getInstalledApplications( »

а есть ли функция наподобие getRunnedApplications(), которая выдает список запущенных последних приложений?

как отличить приложение от сервиса? Проверка на системное приложение не помогает

Источник

How to Get List of Installed Apps in Android

Android PackageManager class is used to retrieve information on the application packages that are currently installed on the device. You can get an instance of PackageManager class by calling getPackageManager() . PackageManager provides methods for querying and manipulating installed packages and related permissions, etc. In this Android example, we we get list of installed apps in Android.

packageManager.getInstalledApplications() return a List of all application packages that are installed on the device. If we set the flag GET_UNINSTALLED_PACKAGES has been set, a list of all applications including those deleted with DONT_DELETE_DATA (partially installed apps with data directory) will be returned.

1. Creating application layout in xml

activity_main.xml

As you can see in the attached screenshot, we will be creating a ListView to show all of the installed applications in android.

snippet_list_row.xml

This layout is being used by the ListView Adapter for representing application details. It shows application icon, application name and application package.

2. Writing Java class

AllAppsActivity.java

This is the main application class that is used to initialize and list the installed applications. As getting the list of application details from PackageManage is a long running task, we will do that in AsyncTask. Also, this class is using custom Adapter “ApplicationAdapter” for custom ListView.

ApplicationAdapter.java

Download Complete Example

Download complete Eclipse project source code from GitHub.

Источник

Android Get List of Installed Apps Package Name With Icons Programmatically

In this tutorial we would going to create an android application which would display us all the only externally installed applications on our android mobile phone device. The application display into custom ListView (RecyclerView) and show us App icon, app name and app package name on screen. This application is designed into RecyclerView along with CardView. So here is the complete step by step tutorial for Android Get List of Installed Apps Package Name With Icons Programmatically.

Note: Read below steps very carefully to add CardView and RecyclerView library inside your current project.

1. Open your project’s build.gradle ( Module : app ) file.

2. Please add below code inside your build.gradle ( Module : app ) file.

3. Screenshot of build.gradle ( Module : app ) file after adding above code.

Here your go now both libraries is successfully imported into our project now next step is to start coding.

How to Android Get List of Installed Apps Package Name With Icons Programmatically.

Code for MainActivity.java file.

Code for ApkInfoExtractor.java file.

Code for AppsAdapter.java file.

Code for activity_main.xml layout file.

Code for cardview_layout.xml layout file.

Screenshot:-

Click here to download Android Get List of Installed Apps Package Name With Icons Programmatically project with source code.

Источник

Package visibility in Android 11

On Android 10 and earlier, apps could query the full list of installed apps on the system using methods like queryIntentActivities() . In most cases, this is far broader access than is necessary for an app to implement its functionality. With our ongoing focus on privacy, we’re introducing changes on how apps can query and interact with other installed apps on the same device on Android 11. In particular, we’re bringing better scoped access to the list of apps installed on a given device.

To provide better accountability for access to installed apps on a device, apps targeting Android 11 (API level 30) will see a filtered list of installed apps by default. In order to access a broader list of installed apps, an app can specify information about apps they need to query and interact with directly. This can be done by adding a element in the Android manifest.

For most common scenarios, including any implicit intents started with startActivity() , you won’t have to change anything! For other scenarios, like opening a specific third party application directly from your UI, developers will have to explicitly list the application package names or intent filter signatures like this:

If you use Custom Tabs to open URLs, you might be calling resolveActivity() and queryIntentActivities() in order to launch a non-browser app if one is available for the URL. In Android 11 there’s a better way to do this, which avoids the need to query other apps: the FLAG_ACTIVITY_REQUIRE_NON_BROWSER intent flag. When you call startActivity() with this flag, an ActivityNotFoundException will be thrown if a browser would have been launched. When this happens, you can open the URL in a Custom Tab instead.

In rare cases, your app might need to query or interact with all installed apps on a device, independent of the components they contain. To allow your app to see all other installed apps, Android 11 introduces the QUERY_ALL_PACKAGES permission. In an upcoming Google Play policy update, look for guidelines for apps that need the QUERY_ALL_PACKAGES permission.

When targeting API level 30 and adding a element to your app, use the latest available release of the Android Gradle plugin. Soon we’ll be releasing updates to older Android Gradle plugin versions to add support for this element. You can find more information and use cases about Package Visibility in the developer documentation.

Источник

Как получить список приложений, установленных пользователем на Android-устройстве?

В настоящий момент я использую следующий фрагмент кода:

Но он возвращает приложения, которые были установлены как производителем устройства, так и мной. Как его ограничить, чтобы возвращались только те приложения, которые я установил?

9 ответов

Зелимир ответил правильно. Но в некоторых случаях он не предоставит вам все установленные сторонние приложения. ApplicationInfo также имеет флаг FLAG_UPDATED_SYSTEM_APP , который установлен

Если это приложение было установлено как обновление встроенного системного приложения

На моем смартфоне такие приложения включают Amazone Kindle, Adobe Reader, Slacker Radio и другие. Эти приложения не поставлялись с телефоном и были установлены из Google Play Store. Таким образом, их можно рассматривать как сторонние приложения.

Так что вы также можете проверить флаг FLAG_UPDATED_SYSTEM_APP .

Если я сделаю pkgAppsList.get (0), он вернет объект ResolveInfo. Как мне получить такую ​​информацию, как значок и имя пакета?

Просто сделай это:

Класс Android PackageManager используется для получения информации о пакетах приложений, которые в настоящее время установлены на устройстве. Вы можете получить экземпляр класса PackageManager, вызвав getPackageManager (). PackageManager предоставляет методы для запроса и управления установленными пакетами и соответствующими разрешениями и т. Д. В этом примере Android мы получаем список установленных приложений в Android.

PackageManager packageManager = getPackageManager (); Список list = packageManager.getInstalledApplications (PackageManager.GET_META_DATA)

PackageManager.getInstalledApplications () возвращает список всех пакетов приложений, установленных на устройстве. Если мы установим флаг GET_UNINSTALLED_PACKAGES, будет возвращен список всех приложений, включая те, которые были удалены с помощью DONT_DELETE_DATA (частично установленные приложения с каталогом данных).

Ответ Николая правильный, но его можно оптимизировать с помощью итератора. Вот что я придумал:

Отвечая на этот вопрос для Android 11 / API 30

context.getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA); Приведенный выше код возвращает список системных приложений, поскольку пользовательские приложения не отображаются по умолчанию, вам необходимо добавить разрешение ниже в манифест, чтобы получить список пользовательских приложений.

Если вы хотите узнать, как это сделать в Kotlin, это показано ниже, хотя, как упоминалось ранее Ketan sangle, вам нужно будет добавить в свой файл AndroidManifest.xml.

В этом случае я использовал системный флаг, чтобы исключить системные приложения, и вы можете найти другие флаги здесь

Источник

Читайте также:  Перепрошивка андроид без компьютера
Оцените статью