device_apps 1.3.0 device_apps: ^1.3.0 copied to clipboard
Plugin to list applications installed on an Android device (iOS is not supported). You can also monitor application changes (updates, uninstallation…)
Device Apps plugin for Flutter #
A plugin to list installed applications on an Android device (⚠️ iOS is not supported). You can also listen to app changes (eg: installations, updates…)
Change with Android 11 #
Starting with Android 11, Android applications targeting API level 30, willing to list "external" applications have to declare a new "normal" permission in their AndroidManifest.xml
file called QUERY_ALL_PACKAGES
. A few notes about this:
- A normal permission doesn't require the user consent
- Don't worry, this plugin automatically adds the permission for you
However, publishing applications on the Google Play with this kind of feature may change in the future. Quoting from the documentation:
In an upcoming policy update, look for Google Play to provide guidelines for apps that need the QUERY_ALL_PACKAGES permission.
👍 Right now, there is no limitation, but be aware that this may change in the future.
Getting Started #
First, you have to import the package in your dart file with:
import 'package:device_apps/device_apps.dart';
List of installed applications #
To list applications installed on the device:
List<Application> apps = await DeviceApps.getInstalledApplications();
You can filter system apps if necessary.
Note: The list of apps is not ordered! You have to do it yourself.
Get apps with a launch Intent #
A launch Intent means you can launch the application.
To list only the apps with launch intents, simply use the onlyAppsWithLaunchIntent: true
attribute.
// Returns a list of only those apps that have launch intent
List<Application> apps = await DeviceApps.getInstalledApplications(onlyAppsWithLaunchIntent: true, includeSystemApps: true)
Get an application #
To get a specific application info, please provide its package name:
Application app = await DeviceApps.getApp('com.frandroid.app');
Check if an application is installed #
To check if an app is installed (via its package name):
bool isInstalled = await DeviceApps.isAppInstalled('com.frandroid.app');
Open an application #
To open an application (with a launch Intent)
DeviceApps.openApp('com.frandroid.app');
Open an application settings screen #
To open an application settings screen
DeviceApps.openAppSettings('com.frandroid.app');
Include application icon #
When calling getInstalledApplications()
or getApp()
methods, you can also ask for the icon.
To display the image, just call:
Image.memory(app.icon);
Listen to app changes #
To listen to applications events on the device (installation, uninstallation, update, enabled or disabled):
Stream<ApplicationEvent> apps = await DeviceApps.listenToAppsChanges();
If you only need events for a single app, just use the Stream
API, like so:
DeviceApps.listenToAppsChanges().where((ApplicationEvent event) => event.packageName == 'com.frandroid.app')