The "SmartDocs" bar can customize this page to show only the features present on a particular Zebra device.
OSX, MX and Android version information for a device can be found in the Android Settings panel or by querying the device through ADB, EMDK or the MX CSP. More info.
Application Manager (AppMgr) administers the user applications on the device. It can be used to programmatically install, uninstall, upgrade and turn on (or off) the ability to launch an application, all with no need for user interaction. AppMgr also can designate an application as the Default Launcher (invoked when pressing the HOME Key), and can perform other tasks related to the management of applications.
On consumer Android devices, app management generally requires the user to interact with a management UI presented on the device. For corporate scenarios involving management by an Enterprise Mobility Management (EMM) system (sometimes referred to as mobile device management, or MDM), user consent or approval might not be desired as they potentially limit a company's ability to fully control the user apps installed on a device. AppMgr provides such control.
When considering the capabilities of AppMgr, it is important to understand the difference between System apps and User apps. System applications are built into the device and always by default. User applications are not built in, and must be installed before use. Some AppMgr functions apply only to System apps, some only to User apps, and some to both. Each function identifies the class of the app(s) to which it applies.
GMS Restricted Mode: In response to security concerns, Zebra has implemented GMS Restricted Mode, which allows administrators to disable some or all GMS apps deemed "safe to disable" without interfering with normal device operations. See GMS Manager for more information.
The evolving security practices employed by Android have changed the user experience in Android 10 to give greater control to the device user. Such changes could impact the enterprise use cases of Zebra customers. To implement the necessary functionality while maintaining device security, MX 10.0 provides the IT administrator with the ability to silently (without device-user interaction) grant application runtime permissions typically used by remote management systems. For some of the Actions executed by this CSP, including Install and Upgrade, apps must be targeted at Android API level 23 (or newer) to be silently granted runtime permissions on devices running Android 10 or later.
The App Manager allows one or more apps to be added to the Battery Optimization "exemption whitelist." While running, apps on this list prevent the device from entering Doze and App Standby power saving modes, thereby preserving their ability to continue functioning and/or providing services. Doze mode conserves battery power by deferring background CPU and network activities when the device is idle. App Standby defers background network activity for apps with which the user has not recently interacted. By default, all non-system apps are subject to Doze and App Standby modes unless added to the whitelist.
For more information, refer to the Android Developer site.
Virtual keyboards (aka soft input panels) are enabled and disabled by referenceing their package name with the desired AppMgr Action. Some of the most common keyboards are listed below:
com.aitype.android.p
com.menny.android.anysoftkeyboard
com.android.inputmethod.latin
com.gamelounge.chroomakeyboard
com.pinssible.fancykey
com.syntellia.fleksy.keyboard
com.google.android.inputmethod.latin
com.gingersoftware.android.keyboard
com.jb.emoji.gokeyboard
com.grammarly.android.keyboard
org.pocketworkstation.pckeyboard
com.whirlscape.minuumfree
kl.ime.oh
org.dslul.openboard.inputmethod.latin
rkr.simplekeyboard.inputmethod
com.touchtype.swiftkey
com.koushikdutta.vysor
Used to enter the Action to perform on an app or app-related setting or action. Actions can apply only to System apps, only to User apps, or to both (as noted in the table below).
IMPORTANT:
See Overview section regarding changes to Android 10 permissions.IMPORTANT:
If upgrading a device to gain access to "GMS Restricted" mode (implemented in MX 8.3 and later), the upgrade and related actions must be performed in the following order:
NOTE:
It is not possible to transition a device to a new OS and to implement GMS Restricted mode with the same XML profile.See GMS Manager for more information about GMS Restricted.
Note: For Install and Upgrade Actions, apps must be targeted at Android API level 23 (or newer) to be silently granted runtime permission on devices running Android 10 or later.
Parm Name: Action
Option | Name | Description | Note | Requires |
---|---|---|---|---|
0 | Do nothing | This value (or the absence of this parm from the XML) causes no change to device settings. |
MX: 4.1+ |
|
1 | Install | Installs the user app contained within an .apk file in the specified path on the device. If the requested app cannot be installed, an error is returned in the Result XML document. Note- Attempts to install an app with the same Package Name as one already installed on the device result in an error in the Result XML. To replace an app already installed on the device with a different version with the same Package Name, use the Upgrade action (option 3). |
OSX: 1.0+ MX: 4.2+ |
|
2 | Uninstall | Removes the User app with the specified Package Name from the device. If the requested app cannot be found or removed, an error is returned in the Result XML. Note- When an app is removed, data stored in sandbox areas owned by that app also are removed. If the app requiring such data is reinstalled, the data must be recreated. |
OSX: 1.0+ MX: 4.1+ |
|
3 | Upgrade | Upgrades the User app contained within an .apk file in the specified path with the same Package Name on the device. If the requested app cannot be found or upgraded, an error is returned in the Result XML. To install an application that is not already installed on the device, use the "Install" action (option 1). Note- When an application is upgraded, the data for that application is maintained. Note- In devices running Android Jelly Bean, an Upgrade can replace any version of an app with any other version of the same app. In devices running Android KitKat or higher, an Upgrade can replace only apps with a numerically greater version number. |
OSX: 1.0+ MX: 4.1+ |
|
4 | SetDefaultLauncher | Sets a System or User app with the specified Package Name as the new default launcher. The specified app must already be installed on the device and generally should be designed to be a Android Launcher according to Android specifications. If no app with the specified Package Name is installed on the device, an error is returned in the Result XML document. |
OSX: 1.3+ MX: 4.1+ |
|
5 | EnableApplication | Enables the System app with the specified Package Name to be launched. If the Package Name does not exist on the device, an error is returned in the Result XML document. |
MX: 4.2+ Android API: 1+ |
|
6 | DisableApplication | Prevents the System app with the specified Package Name from being launched. If Package Name does not exist on the device, an error is returned in the Result XML document. |
MX: 4.2+ Android API: 1+ |
|
7 | ClearRecentApps | Clears the Android Recent Applications List, which otherwise would allow a user to see and launch recently used apps (Protected Apps excluded. See Note above). |
MX: 4.2+ Android API: 16+ |
|
8 | LaunchApplication | Allows a System or User app to be launched by its visible Name rather than by its package name (not case-sensitive). This refers to the app name as it appears in Launcher, App Drawer, Application Manager or app_name field of the strings.xml file (i.e. "Calculator"). To use this value, the app and its icon or widget must be visible in the Launcher screen and launchable with its main activity using that icon or widget. If the app is not present, does not have an icon or widget, cannot be launched using its main activity or contains only services and receivers, an error is returned in the Result XML document. |
MX: 5.1+ Android API: 1+ |
|
9 | BatteryOptimization | On devices running Nougat (and higher), all apps by default allow the device to enter Doze Mode to maximize battery life. The "BatteryOptimization" parameter allows one or more apps to be added to (or if previously added, removed from) the "Doze Mode exemption" list, which determines whether the device can enter a power saving mode while the app is running. |
MX: 7.0+ Android API: 23+ |
|
10 | ClearApplicationCache | Erases the application cache, which stores an app's temporary files. This is the functional equivalent of pressing the "Clear Cache" button in the Android App Manager, accessed through the Settings panel. |
MX: 8.0+ Android API: 24+ |
|
11 | EnableGMSApps | Enables all GMS applications and services on the device, reversing any prior Action(s) to disable them. Subsequent DisableApplication Actions are effective. |
OSX: 8.1+ MX: 8.0+ Android API: 24+ |
|
12 | DisableGMSApps | Disables all GMS applications and services on the device (that are safe to disable) and removes their icons from the Android Launcher. Subsequent EnableApplication Actions are effective. SEE NOTES. |
OSX: 8.1+ MX: 8.0+ Android API: 24+ |
|
13 | ClearApplicationUserData | Erases all data created by the app specified in the Package parameter. |
OSX: 8.1+ MX: 9.1+ Android API: 24+ |
|
14 | ReserveUID | Reserves a unique Android user ID (UID) for an app never before installed or preserves the UID of one previously assigned. |
OSX: 9.2+ MX: 9.2+ Android API: 28+ |
|
15 | UnReserveUID | Removes the reservation for a UID of an installed app. |
OSX: 9.2+ MX: 9.2+ Android API: 28+ |
|
16 | AllowApplicationUpgrade | Allows the selected app to receive upgrades. |
OSX: 8.13+ MX: 10.3+ Android API: 26+ |
|
17 | DisallowApplicationUpgrade | Prevents the selected app from receiving upgrades. |
OSX: 8.13+ MX: 10.3+ Android API: 26+ |
Used to enter the path and file name of the Android .apk
file within the device file system from which to perform an app installation or upgrade.
IMPORTANT:
An .apk
file can be used only to Install or Upgrade a User app or to Upgrade a System app. Any application being installed from an .apk
file is by definition a User Application since it was not built into the device.
For an Upgrade, the .apk
file must be signed with the same developer certificate as the application it is intended to upgrade or an error will be returned in the Result XML document. A System application can be upgraded using only an .apk
file produced by the same developer that produced the built-in System application. A System application that has been upgraded is considered a User app, but will have the same permissions as the version it replaced, allowing the new version to perform the same operations as the original System app. If data is cleared and upgrades are removed from such an app, the app reverts to its original built-in version and is once again considered a System app.
Input value rules:
.apk
file. For example: /storage/sdcard1/Herald.apk
Shown if: The Action is "Install" or "Upgrade"
Parm Name: APK
Requires:
- OSX: 1.0+
- MX: 4.2+
Used to enter the Package Name(s) of one or more applications for the selected Action. Separate multiple Package Names using commas. Package Name(s) must be specified exactly, and can be acquired from the application developer, by extracting the Package Name from the .apk file or by finding it in the device.
Important: If a Package Name is specified incorrectly in a list, all names following that name are ignored.
Input value rules:
com.mycompany.mypackage
.Shown if: The Action is "Uninstall" or "Set as Default Launcher" or "Enable Application" or "Disable Application" or "Clear Application Cache" or "Remove Application User Data" or "Reserve UID" or "Unreserve UID" or "Allow Application Upgrade" or "Disallow Application Upgrade"
Parm Name: Package
Requires:
- OSX: 1.0,1.3+
- MX: 4.2+
- Android API: 1+
Used to enter the name of the certificate file for signing the application(s) specified in the Package name parameter.
Input value rules:
Shown if: The Protected List Action is "Reserve Application UID"
Parm Name: PackageSignature
Requires:
- MX: 9.2+
Used to enter the Name of the application for the selected Action.
Note: To perform the above listed Actions on an application, the Name of that application can be specified instead of the Package Name. The Name is defined as the name that accompanies the application icon in the Android Launcher, App Drawer or Application Manager. This name also is specified in the
app_name
field of thestrings.xml
file.
Input value rules:
app_name
field of the strings.xml
file (i.e. "Calculator")Shown if: The Action is "Launch an application"
Parm Name: ApplicationName
Requires:
- MX: 5.1+
Used to add or remove apps from the Protected List, which allows apps to be exempted from certain constraints.
Note: On some devices, protected apps remain on the Recent Apps list after it has been cleared using the "ClearRecentApps" Action.
An app with its Package Name on the Protected List is allowed to:
Shown if: The Action is "Install" or "Uninstall" or "Upgrade" or "Upgrade" or "SetDefaultLauncher" or "EnableApplication" or "DisableApplication" or "ClearRecentApps" or "LaunchApplication"
Parm Name: ProtectedListAction
Option | Name | Description | Note | Requires |
---|---|---|---|---|
0 | Do nothing | This value (or the absence of this parm from the XML) will cause no change to the Protected List. |
OSX: 1.2+ MX: 4.2+ |
|
1 | AddAppToProtectedList | Adds the specified app package name to the Protected List. |
OSX: 1.2+ MX: 4.2+ |
|
2 | RemoveAppFromProtectedList | Removes the specified app package name from the Protected List. |
OSX: 1.2+ MX: 4.2+ |
|
3 | ClearProtectedList | Removes all app package names from the Protected List. |
OSX: 1.2+ MX: 4.2+ |
Used to enter the Package Name(s) of the application to add or remove from the Protected List. Separate multiple names using commas. Name(s) must be specified exactly, and can be acquired from the application developer, by extracting the Package Name from the .apk file or by finding it in the device.
Important: If a Package Name is specified incorrectly in a list, all names following that name are ignored.
Input value rules:
com.mycompany.myPackage
com.mycompany.myPackage
,com.mycompany.myOtherPackage
Shown if: The Protected List Action is "Add Application to Protected List" or "Remove Application from Protected List"
Parm Name: ProtectedListPackage
Requires:
- OSX: 1.2+
- MX: 4.2+
Used to allow blocking of access to App Info for all applications without blocking access to other parts of the Android Settings panel. By disabling App Info, the user is prevented from using App Info to interfere with the configured set of installed applications.
Since the AppMgr can control which applications are installed, it might be of concern that a device user can use the App Info section of the in-device Android Settings panel to impact an installed application. For example, a device user might terminate (Force Stop) an application, remove application data (Clear Data), or even Uninstall the application completely. If an MDM is being used to control the set of installed applications on a device, such activities by a device user might be undesirable.
Compounding the issue, the App Info can be reached from several places in the device UI other than the Android Settings panel. For example, App Info can be reached from the Recent Apps list or from a notification related to the application in the Notification bar.
To prevent device users from using App Info to alter the configured set of installed applications, it might be desirable to prevent the device user from accessing App Info altogether. Of course, AppMgr can be used to disable launching of the System Settings Menu application, prevents access to App Info. But that also prevents access to all other aspects of the Settings panel. A more targeted approach is to block only App Info.
Parm Name: AccessAppInfoAction
Option | Name | Description | Note | Requires |
---|---|---|---|---|
0 | Do nothing | This value (or the absence of this parm from the XML) causes no changes to device settings; any previously selected setting is retained. |
OSX: 4.2+ MX: 4.2+ |
|
1 | EnableAccessAllInfo | Enables access to App Info for all applications on the device if access to the Android Settings panel application is enabled. |
OSX: 4.2+ MX: 4.2+ |
|
2 | DisableAccessAllInfo | Disables access access to App Info for all application on the device. |
OSX: 4.2+ MX: 4.2+ |
DO NOT USE THIS PARAMETER if the desired behavior is to ALLOW Doze Mode. On devices running Android 7.x (Nougat) and later, all apps by default allow the device to enter Doze Mode to maximize battery life.
Used to enter one or more apps (by Package Name) to be added to the Battery Optimization "exemption whitelist." While running, apps on this list prevent the device from entering power-saving modes. To enter multiple Package Names, separate with commas. Package Name(s) must be specified exactly, and can be acquired from the application developer, by extracting the Package Name from the .apk file or by identifying it in the device. Doze Mode is controlled using the Power Manager CSP.
Input value rules:
com.mycompany.mypackage
Important:
If a name is specified incorrectly in a list, all names following that name are ignored.
Shown if: The Action is "Battery Optimization"
Parm Name: AddPackageNames
Requires:
- MX: 7.0+
Used to enter one or more apps (by Package Name) to be removed from the Battery Optimization "exemption whitelist." Apps not on list do not prevent the device from entering power-saving modes. To enter multiple Package Names, separate with commas. Package Name(s) must be specified exactly, and can be acquired from the application developer, by extracting the Package Name from the .apk file or by identifying it in the device.
Input value rules:
com.mycompany.mypackage
.Shown if: The Action is "Battery Optimization"
Parm Name: RemovePackageNames
Requires:
- MX: 7.0+
Used to control access to certain (supported) features on a device.
Shown if: The Action is NOT "Do Nothing"
Parm Name: AppFeature
Option | Name | Description | Note | Requires |
---|---|---|---|---|
1 | Background Data | Allows the selected app to communicate using background data. |
MX: 9.3+ Android API: 26+ |
This is the On/Off switch for features selected using the App Feature parameter or in the package selected using the App Feature Packages parameter.
Parm Name: AppFeatureAction
Option | Name | Description | Note | Requires |
---|---|---|---|---|
0 | Do nothing | This value (or the absence of this parm from the XML) causes no changes to device settings; any previously selected setting is retained. |
MX: 9.3+ Android API: 26+ |
|
1 | Turn On | Enables the selected feature. |
MX: 9.3+ Android API: 26+ |
|
2 | Turn Off | Disables the selected feature. |
MX: 9.3+ Android API: 26+ |
Used to enter the name of the app package(s) on which to perform an App Feature Action. Separate multiple names using commas.
Input value rules:
packagename1
,packagename2
,packagename3
)Shown if: The Action is NOT "Do Nothing"
Parm Name: AppFeaturePackages
Requires:
- MX: 9.3+
- Android API: 26+
<!-- Silently install Clock.apk from the /enterprise/usr/persist folder -->
<wap-provisioningdoc>
<characteristic version="4.2" type="AppMgr">
<parm name="Action" value="Install" />
<parm name="APK" value="/enterprise/usr/persist/Clock.apk" />
</characteristic>
</wap-provisioningdoc>
<!-- Silently upgrade Clock.apk from the /enterprise/usr/persist folder -->
<wap-provisioningdoc>
<characteristic type="AppMgr" version="4.2" >
<parm name="Action" value="Upgrade"/>
<parm name="APK" value="/enterprise/usr/persist/Clock.apk"/>
</characteristic>
</wap-provisioningdoc>
<wap-provisioningdoc>
<characteristic version="4.2" type="AppMgr">
<parm name="Action" value="DisableApplication" />
<parm name="Package" value="com.mypackagename" />
</characteristic>
</wap-provisioningdoc>
<wap-provisioningdoc>
<characteristic version="4.2" type="AppMgr">
<parm name="Action" value="Uninstall" />
<parm name="Package" value="com.packagename" />
</characteristic>
</wap-provisioningdoc>
<wap-provisioningdoc>
<characteristic version="4.2" type="AppMgr">
<parm name="Action" value="Install" />
<parm name="APK" value="/sdcard/myapp.apk" />
</characteristic>
<characteristic version="4.3" type="Intent">
<parm name="Action" value="StartActivity" />
<parm name="ActionName" value="android.intent.action.MAIN" />
<parm name="Package" value="com.mypackage" />
<parm name="Class" value="com.mypackage.myactivity" />
</characteristic>
</wap-provisioningdoc>
<wap-provisioningdoc>
<characteristic type="AppMgr" version="7.0" >
<parm name="Action" value="BatteryOptimization"/>
<parm name="AddPackageNames" value="com.example.android.deviceowner, com.symbol.software.filexpa"/>
</characteristic>
</wap-provisioningdoc>
// Response from AppMgr CSP on success:
<wap-provisioningdoc>
<characteristic type="AppMgr" version="7.0" >
<parm name="Action" value="BatteryOptimization"/>
<parm name="AddPackageNames" value="com.example.android.deviceowner, com.symbol.software.filexpa"/>
</characteristic>
</wap-provisioningdoc>
<wap-provisioningdoc>
<characteristic type="AppMgr" version="7.0" >
<parm name="Action" value="BatteryOptimization"/>
<parm name="RemovePackageNames" value="com.example.android.deviceowner, com.symbol.software.filexpa"/>
</characteristic>
</wap-provisioningdoc>
// Response from AppMgr CSP on success:
<wap-provisioningdoc>
<characteristic type="AppMgr" version="7.0" >
<parm name="Action" value="BatteryOptimization"/>
<parm name="RemovePackageNames" value="com.example.android.deviceowner, com.symbol.software.filexpa"/>
</characteristic>
</wap-provisioningdoc>
<wap-provisioningdoc>
<characteristic type="AppMgr" version="8.0" >
<parm name="Action" value="ClearApplicationCache"/>
<parm name="Package" value="com.symbol.tool.stagenow"/>
</characteristic>
</wap-provisioningdoc>