ZWC Setup

Zebra Workstation Connect 1.6

Overview

Zebra Workstation Connect requires a supported Zebra device with the appropriate Zebra OS package docked in a Zebra Workstation Docking Cradle. To experience the full solution, install the Zebra Workstation Connect app v1.0 (or later).

Requirements

  • Supported Zebra device(s) running Android 11 (or later)

  • The latest Android 11 OS package deployed to supported Zebra device(s)

  • The Zebra Workstation Connect app v1.0 (or later), available from the Zebra Suport Portal

  • TC5X Workstation Docking Cradle Kit (CRD-TC5X-1SWS-01*)
    Kit includes:

    • Cradle with HDMI, Ethernet and four (4) USB Ports (CRD-TC5X-1SWS1-11)
    • Power supply 100-240vac, 12vdc, 4.16a, 50w (PWR-BGA12V50W0WW)
    • DC cable (CBL-DC-388A1-11)
    • Does NOT include: country-specific AC line cord (sold separately)

    * ZWC also supports CRD-ET5X-1SCOM2R and CRD-ET5X-1SCOM1 cradles
    † ZWC 1.6 is NOT available from Google Play

Supported Devices

ZWC is supported only on select Zebra devices. Get Zebra Workstation Connect from:


Manual Installation

Use this process to set up individual or small groups of devices by copying files directly to device(s). This process requires a device with the latest Zebra Android 11 OS package installed. If necessary, use StageNow to Perform an OS Update on device(s), then return here to proceed.

To install the ZWC solution (prior to docking for the first time):

1. If installing from Google Play:
Visit Google Play (link above) and install Zebra Workstation Connect onto target device(s).
THEN SKIP TO STEP 5.
Some versions are NOT available on Google Play. 2. If installing from the Zebra Support Portal:
Prepare device for copying files directly from a PC by enabling developer options and USB debugging in the device Settings panel.

3. Download (link above) and push the Zebra Workstation Connect app (com.zebra.workstationconnect.release) onto target device(s) using adb or a similar means.

4. On the device, navigate to com.zebra.workstationconnect.release and install the app.

5. After the ZWC app is installed, long-press its icon on the device screen.
Alternatively, go to Settings > Apps & notifications > SEE ALL APPS > WorkstationConnect > Advanced > Display over other apps.
A screen appears similar to the one shown below: image

6. Enable the "Display over other apps" option (it might be necessary to scroll down).
When finished, exit that panel but stay in Settings for the next step.

7. In the Developer options panel, enable Desktop Mode:
Settings > System > Advanced > Developer options > (scroll down to) Enable desktop mode image IMPORTANT NOTES:

  • Some mobile-device apps configured with a fixed window size can impose limits when organizing multiple apps running on the desktop. Selecting the option to Force activities to be resizable (shown above) can help alleviate this issue.
  • Some apps, including the Android Camera app, do not support resizable windows and might behave unexpectedly if their activities are forced to be resizable.
  • Always test apps thoroughly before deployment to production environments after changing this setting.

8. Reboot the device.
A device reboot is ALWAYS required after installing any new primary or secondary launcher.

After rebooting, the device presents Desktop Mode whenever it's docked.


After Installation

When first inserted into a Workstation Docking Cradle that's connected to an external monitor, a device configured as above displays the Zebra Workstation Connect default Desktop similar to the image below. The device screen allows the user to launch and run applications as usual.

image Click to enlarge; ESC to exit.

After the device user or an administrator configures app shortcuts and other preferences for a device, those settings are restored whenever that device is placed in a Workstation Docking Cradle.

For help setting up Desktop Mode, see the Workstation Connect User Guide (pdf)

Also see important Usage Notes.


Automated Installation

The Zebra Workstation Connect solution can be installed and configured remotely using Zebra StageNow and through most commercially available Enterprise Mobility Management (EMM) systems.

For StageNow and EMM instructions, see the Workstation Connect Administrator's Guide.


Development Best Practices

When developing apps for use with the Zebra Workstation Connect solution, the following techniques and resources might be useful.


Protect Password Input

When designing a password input field, it's best to set the field type as "textPassword" so that the plain text of the password as it's being entered is displayed as discreet characters such as asterisks or bullets.

Zebra recommends masking the user password in this way as a measure of security, particularly if the password field could appear on the secondary screen, which is sometimes visible to others. For more information, please refer to the relevant Android community docs.


Camera Usage on Secondary Screen

For apps that use the device camera, it is possible to present a window on the secondary screen to preview and/or capture camera images. Please refer to the Android development community pages linked below for more information.

  • Camera2 APIs | Low-level controls for all camera use cases
  • CameraX Jetpack | Google library intended to simplify camera app development

Query External Monitor

To programmatically query the secondary display ID:


DisplayManager dm = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
Display[] displays = dm.getDisplays();
for (Display display : displays) {
    String name = display.getName();
    if (name.startsWith("DisplayLink") || name.startsWith("HDMI Screen")) {
        return display.getDisplayId();
    }
}

To determine which display an app is running on:


mDisp  = mContext.getDisplay();
if (mDisp != null) mCurrentDisplayId = mDisp.getDisplayId();

To get a list of available displays (including the one an app is running on):


mDisplayManager = (DisplayManager)mContext.getSystemService(Context.DISPLAY_SERVICE);
displays = mDisplayManager.getDisplays();

To launch an app on a specific display:


Intent intent = mContext.getPackageManager().getLaunchIntentForPackage(targetApp);
ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchDisplayId(launchId);
Bundle bdl = options.toBundle();
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent,bdl);

Multi-window Apps

To build an app to be multi-window ready, set the following manifest flag:

  <application
                 android:resizeableActivity="true">
  </application>

Learn more about building multi-window apps:

Apps that are built as non-resizable exhibit specific behaviors when launching on the Desktop and moving from the device to the Desktop. Learn more.


Refresh Suppression

To suppress app-refresh issues that can arise when moving an app from the device to the Desktop, add the following line to the manifest's <activity> element:

<android:configChanges = “orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|density|uiMode”/>

Learn more about the activity element


Presentation Class

The Presentation class allows an app to show content on a secondary display. When developing or working with apps that will display content on an external monitor, it might be helpful to understand this class and its related Context, Display, and Router classes.

Learn more about the Presentation class.


Starting Tasks

For apps containing multiple activities, Zebra recommends following Android developer guidance for starting a new task.


Monitor Docking

To monitor the docking status of a device programmatically, refer to this Android guide to determine the docking state and type.

The dock-state details are added as an extra parameter in the sticky broadcast of the ACTION_DOCK_EVENT intent action. As ACTION_DOCK_EVENT is a sticky broadcast, the registerReceiver() method should be called with the instance of the broadcast receiver to get the onReceive call events and use the intent extra to determine whether the device is docked or undocked.

Register the DOCK intent:


IntentFilter dockFilter = new IntentFilter(EXTRA_DOCK_STATE);
dockFilter.addAction(ACTION_DOCK_EVENT);
registerReceiver(new DockReceiver(), dockFilter);

Call the registerReceiver() method:


private final class DockReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        int dockState = intent.getIntExtra(Intent.EXTRA_DOCK_STATE,Intent.EXTRA_DOCK_STATE_UNDOCKED);            
        if (dockState == 1) {
            // we are now in 'dock'
            // place your code here
        }else if(dockState == 0){
            // we are now in 'undock'
            // place your code here
    }
  }
}

Also See

For more information about ZWC setup, administration, features and usage, please refer to the following guides: