### Install and Start Application Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/appmgr This section details how to install an application using its APK file and then start it after installation. ```APIDOC ## POST /websites/techdocs_zebra_emdk-for-android_11-0 ### Description Installs an application from an APK file and then starts the application. ### Method POST ### Endpoint /websites/techdocs_zebra_emdk-for-android_11-0 ### Parameters #### Request Body ```xml ``` ### Request Example ```xml ``` ### Response #### Success Response (200) Returns an XML confirmation of the operation. #### Response Example ```xml ``` ``` -------------------------------- ### Install and Start Application using EMDK Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/appgallerymgr This snippet demonstrates how to install an APK file and then start a specific activity within that application using the AppMgr and Intent characteristics in a WAP provisioning document. It requires the APK file path and the package and class names of the activity to be started. ```xml ``` -------------------------------- ### Install Client Certificate and Private Key (.P12) Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/wifi This example demonstrates installing a client certificate and private key from a .P12 file. It uses CertAction 1, sets CertType to 9, specifies the client certificate file, and includes the PrivateKeyPassword. ```xml ``` -------------------------------- ### Get and Release SAM Manager Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/samapiusage Code examples for acquiring and releasing the SAMManager instance from the EMDKManager. ```APIDOC ## Get and Release SAM Manager ### Description Before interacting with SAM functionalities, you must obtain an `EMDKManager` instance and then retrieve the `SAMManager`. It is crucial to release the `SAMManager` when it's no longer needed to prevent resource conflicts. ### Get SAM Manager ```java // Assume emdkManager is already initialized SAMManager samManager = (SAMManager) emdkManager.getInstance(EMDKManager.FEATURE_TYPE.SAM); ``` ### Release SAM Manager // Note: Explicit release of SAMManager is not shown in the provided text, but it's good practice to manage EMDKManager lifecycle. // Typically, you would release the EMDKManager itself when the application or feature is no longer active. // Example: emdkManager.release(); ``` -------------------------------- ### Install Client Certificate (.PEM) Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/wifi This code example shows how to install a client certificate from a .PEM file. It sets CertAction to 1, defines the certificate alias, type (6 for client cert), method (2), and the path to the certificate file. ```xml ``` -------------------------------- ### MainActivity Example Source: https://techdocs.zebra.com/emdk-for-android/11-0/api/reference/com/symbol/emdk/personalshopper/personalshopper An example of a MainActivity that implements EMDKListener, likely to interact with EMDK services including potentially the PersonalShopper class. It demonstrates basic activity and listener setup. ```java public class MainActivity extends Activity implements EMDKListener { ``` -------------------------------- ### EMDK Feature Characteristic Node Example (AppMgr) Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/xmlresponseguide This XML snippet demonstrates a feature characteristic node, specifically for the 'AppMgr' (Application Manager) feature. It includes attributes like 'type' and 'version', and parameters specific to the feature, such as the action to perform (Install) and the APK file path. ```xml ``` -------------------------------- ### XML Submission for Profile Creation and App Installation Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/xmlresponseguide This XML document is submitted for provisioning. It defines a profile named 'MyProfile' and includes configurations for both 'RemoteScannerMgr' (to reset the default scanner) and 'AppMgr' (to install an APK file). The 'Action' for 'RemoteScannerMgr' is set to '3', and for 'AppMgr' it's 'Install'. ```xml ``` -------------------------------- ### Get Install Apps from Unknown Sources Status Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/devadmin Retrieves the status of the 'Install apps from unknown sources' setting on the device. ```APIDOC ## Get Install Apps from Unknown Sources Status ### Description This endpoint retrieves the status of the 'Install apps from unknown sources' setting on the device. ### Method GET (Implied by the XML structure for querying settings) ### Endpoint `/websites/techdocs_zebra_emdk-for-android_11-0` (This is a file path, not a typical API endpoint) ### Parameters #### Request Body ```xml ``` ### Request Example ```xml ``` ### Response #### Success Response (200) - **UnknownSourcesStatus** (string) - The status of the setting ('1' for enabled, '0' for disabled). #### Response Example ```xml ``` ``` -------------------------------- ### EMDK Configuration and Java Profile Processing Example Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/xmlresponseguide This snippet shows an example EMDKConfig.xml file for setting up a clock profile and a Java code example demonstrating how to process this profile using the ProfileManager. It highlights how to extract profile name, feature type, and feature name from the XML to construct the profileName string for the Java code. Extra data can be provided to override specific parameters. ```xml ``` ```java String[] extraData = new String[2]; extraData[0] = "Clk01.Date=2014-10-10" extraData[1] = "Clk02.Time=10:10:10" profileName = "ClockProfile-1/Clock/Clk01" EMDKResults result = mProfileManager.processProfile( profileName, ProfileManager.PROFILE_FLAG.SET, extraData); ``` -------------------------------- ### XML Provisioning: Handling AppMgr APK Not Found Error Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/xmlresponseguide This example demonstrates an XML submission where an error occurs because the specified APK for the AppMgr feature does not exist. The response includes `characteristic-error` and `parm-error` tags, detailing that the APK is missing from the provided path, preventing the install action. ```xml ``` ```xml ``` -------------------------------- ### Camera Configuration Examples Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/cameramgr Provides examples of XML configurations for various camera settings. ```APIDOC ## Camera Configuration Examples ### Enable all cameras: ```xml ``` ### Disable all cameras: ```xml ``` ### Enable the front-facing camera: ```xml ``` ### Disable the rear-facing camera: ```xml ``` ### Disable the front-facing camera and enable the rear-facing camera: ```xml ``` ``` -------------------------------- ### Get SAM Slot Index Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/samapiusage Retrieves the index of the SAM slot, starting from 1. This can be useful for identifying specific SAM modules if multiple are present or for logging purposes. ```java int index = sam.getSamIndex(); ``` -------------------------------- ### Install Client Certificate and Private Key (.PFX) Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/wifi This snippet illustrates the installation of a client certificate and its private key from a .PFX file. It configures CertAction to 1, sets the certificate type to 8, specifies the client certificate file, and provides the private key password. ```xml ``` -------------------------------- ### Get EMDKManager Instance (Java) Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/xmlresponseguide This Java code demonstrates how to obtain an instance of EMDKManager synchronously. It includes setup for handling initialization results and cleanup in onDestroy and onClosed callbacks. The ProfileManager is then retrieved from the EMDKManager instance. ```java public class MainActivity extends Activity implements EMDKListener //Declare a variable to store ProfileManager object private ProfileManager profileManager = null; //Declare a variable to store EMDKManager object private EMDKManager emdkManager = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //The EMDKManager object will be created and returned in the callback. EMDKResults results = EMDKManager.getEMDKManager(getApplicationContext(), this); //Check the return status of EMDKManager object creation. if(results.statusCode == EMDKResults.STATUS_CODE.SUCCESS) { //EMDKManager object creation success }else { //EMDKManager object creation failed } } @Override protected void onDestroy() { super.onDestroy(); //Clean up the objects created by EMDK manager if (profileManager != null) profileManager = null; if (emdkManager != null) { emdkManager.release(); emdkManager = null; } } @Override public void onClosed() { //This callback will be issued when the EMDK closes unexpectedly. if (emdkManager != null) { emdkManager.release(); emdkManager = null; } } @Override public void onOpened(EMDKManager emdkManager) { this.emdkManager = emdkManager; //Get the ProfileManager object to process the profiles profileManager = (ProfileManager)emdkManager.getInstance(EMDKManager.FEATURE_TYPE.PROFILE); } } ``` -------------------------------- ### Install Client Certificate and Private Key (.PKCS12) Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/wifi This snippet shows how to install a client certificate and private key from a .PKCS12 file. It configures CertAction to 1, CertType to 9, CertMethod to 10, and provides the client certificate file path and private key password. ```xml ``` -------------------------------- ### Examples: Encrypt SD Card Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/encryptmgr Example XML provisioning document to encrypt an SD card using a specified key. ```APIDOC ### Request Example ```xml ``` ``` -------------------------------- ### Sample Android Manifest File (XML) Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/powermgr This is a sample XML manifest file showing various Android system properties. It includes product details, build information, BSP configurations, and device-specific hardware revisions. This file is typically used for device configuration and identification. ```xml ``` -------------------------------- ### Set Remote Trigger Status Example Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/extended_scanner_parameters Example code for setting the remote_trigger_status parameter. ```APIDOC ## Sample Code: Set Remote Trigger Status ### Description This code segment demonstrates how to set the `remote_trigger_status` parameter to '0' (Disable) using the scanner parameter configuration APIs. ### Method POST ### Endpoint /scanner/params ### Request Body Example ```json { "remote_trigger_status": "0" } ``` ### Code Snippet (Java) ```java try { // Prepare bundle with parameter to get current value (optional, but good practice) Bundle requiredParams = new Bundle(); requiredParams.putString("remote_trigger_status", ""); Bundle currentParams = scanner.getParams(requiredParams); // Prepare bundle to set new value Bundle paramsToSet = new Bundle(); if(currentParams.containsKey("remote_trigger_status")) { paramsToSet.putString("remote_trigger_status", "0"); // Set to Disable } scanner.setParams(paramsToSet); } catch (ScannerException e) { updateStatus(e.getMessage()); } ``` ### Notes - Parameter names must match those listed in the 'Supported Parameters' section. - Ensure the scanner is Enabled to receive trigger press notifications if you are configuring `remote_trigger_status`. ``` -------------------------------- ### Example SettingsMgr Output (XML) Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/settingsmgr This is an example output showing the structure and parameters that might be returned when querying the SettingsMgr characteristic. ```xml ``` -------------------------------- ### Java Example: Getting Enum by Name Source: https://techdocs.zebra.com/emdk-for-android/11-0/api/reference/com/symbol/emdk/notification/notificationresults Provides an example of how to retrieve a specific NotificationResults enum constant by its name using the `valueOf()` method. This is useful when the error name is known as a string. ```java NotificationResults result = NotificationResults.valueOf("SUCCESS"); // result will be NotificationResults.SUCCESS ``` -------------------------------- ### Install or Upgrade Application Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/appmgr Details on how to install or upgrade applications using APK files or App Bundles. ```APIDOC ## POST /websites/techdocs_zebra_emdk-for-android_11-0/install_or_upgrade ### Description This endpoint facilitates the installation or upgrade of Android applications using specified APK files or App Bundles. It supports both user and system app updates, with specific rules for package signing and file formats. ### Method POST ### Endpoint /websites/techdocs_zebra_emdk-for-android_11-0 ### Parameters #### Request Body - **APK** (string) - Required - The full path and name of the device-resident `.apk`, `.apks`, `.xapk`, or `.zip` file. Example: `/enterprise/appmgr/Herald.apk` - **Package** (string) - Optional - Comma-separated list of package names to be installed or upgraded. Ignored if APK is provided. - **PackageSignature** (string) - Optional - The name of the certificate file for signing the application(s). ### Request Example ```json { "APK": "/enterprise/appmgr/MyApp.apk" } ``` ### Response #### Success Response (200) - **status** (string) - Operation status message. #### Response Example ```json { "status": "Application installed successfully." } ``` ``` -------------------------------- ### OS Update File Example - .upl format Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/powermgr This snippet demonstrates the format of an OS update '.upl' file, which contains a list of package files (e.g., .zip archives) to be applied in a specific order for updating the device's operating system. Each package is prefixed with 'package:'. ```text //Contents of the "osupdate.upl" text file: package:M99N0KXXVPUCP14500.zip package:CFE-M99-L-N0-010101_G_00_02.zip // Note that package file names are preceded by the notation "package:" ``` -------------------------------- ### Install Client Certificate and Private Key (PFX, P12, PKCS12) Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/certmgr This XML provisioning installs a client certificate along with its private key. It supports PFX, P12, and PKCS12 file formats and requires the private key password. CertType is set to 8 for this operation. ```xml ``` -------------------------------- ### Certificate Action API Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/certmgr This endpoint allows for installing or uninstalling certificates on the device, or initializing the Android Keystore. Initialization is not supported on Android 10 and later. ```APIDOC ## POST /CertificateAction ### Description Installs, uninstalls, or initializes the Android Keystore. ### Method POST ### Endpoint /CertificateAction ### Parameters #### Query Parameters - **CertAction** (integer) - Required - Specifies the action to perform: 1 for Install, 2 for Uninstall, 3 for Initialize Keystore. - **CertAlias** (string) - Required - The alias to identify the certificate. - **CertPath** (string) - Required for Install - The path to the certificate file. - **Password** (string) - Required for PKCS12 files - The password for the certificate file. ### Request Example ```json { "CertAction": 1, "CertAlias": "mycertalias", "CertPath": "/sdcard/mycert.pfx", "Password": "mypassword" } ``` ### Response #### Success Response (200) - **Result** (string) - Indicates the success or failure of the operation. #### Response Example ```json { "Result": "Success" } ``` ``` -------------------------------- ### Get SAM Index Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/samapiusage Retrieves the slot index of the SAM. ```APIDOC ## Get SAM Index ### Description This method returns the index of the SAM's slot, starting from 1. This can be useful for identifying specific SAM modules if multiple are present or for logging purposes. ### Method `getSamIndex()` ### Endpoint Accessed via a `SAM` object. ### Parameters None ### Request Example ```java int index = sam.getSamIndex(); // index will be 1, 2, etc., depending on the SAM slot. ``` ### Response #### Success Response - `int`: The slot index of the SAM (1-based). #### Response Example ```json { "samIndex": 1 } ``` ``` -------------------------------- ### Access Manager Profile XML Example (Java) Source: https://techdocs.zebra.com/emdk-for-android/11-0/tutorial/tutmxaccessmanager This Java code snippet provides a direct example of the XML structure used for configuring an Access Manager profile in 'Single User Mode Without White list'. This XML is programmatically generated and passed to the `processProfile` method. ```java modifyData[0] = "" + "" + "" + "" + "" + "" + ""; ``` -------------------------------- ### XML: Install Application using AppMgr Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/appgallerymgr Installs an APK file silently on the device. Requires the APK to be present in the specified path. The 'Action' parameter must be set to 'Install' and 'APK' must point to the application package. ```xml ``` -------------------------------- ### Get SerialComm Port from SerialCommManager in Android Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/serialcomm Obtains a SerialComm port object by first getting a list of supported serial ports and then selecting one. The number of enumerated ports varies by device model. ```Java List serialPorts = serialCommManager.getSupportedPorts(); serialComm = serialCommManager.getPort(serialPorts.get(0)); ``` -------------------------------- ### Configure SimulScan Feedback Settings Source: https://techdocs.zebra.com/emdk-for-android/11-0/tutorial/tutSimulScanAPI Sets audio, haptic, and LED feedback configurations for the SimulScan reader. This is part of the initial setup before starting a scan. ```java config.audioFeedback = true; // Turn on/off haptic feedback. config.hapticFeedback = true; // Turn on/off LED feedback. config.ledFeedback = true; // Set SimulScanConfig selectedSimulScanReader.setConfig(config); ``` -------------------------------- ### Get SimulScanReader using Device Identifier Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/simulscan_guide This code shows how to get a SimulScanReader instance using a specific device identifier, such as INTERNAL_CAMERA1. An exception will be thrown if the identifier is not valid for the target platform. Error handling for SimulScanException is included. ```Java try { simulscanManager.getDevice(SimulScanDeviceIdentifier.INTERNAL_CAMERA1); } catch (SimulScanException e) { e.printStackTrace(); } ``` -------------------------------- ### Configuration - General Parameters Source: https://techdocs.zebra.com/emdk-for-android/11-0/api/reference/index-files/index-19 This section details general configuration parameters available in the EMDK for Android. ```APIDOC ## Configuration Parameters ### Description Provides details on various configuration parameters for EMDK for Android. ### Parameters #### General Configuration - **skipUnsupportedParameter** (boolean) - Optional - This flag determines whether to skip unsupported parameters/values and continue, or stop setting the configuration. - **smoothEffect** (boolean) - Optional - Enable or disable the smooth effect of the LED blinking. - **stopBit** (enum) - Required - Specifies the number of stop bits to be used. #### Barcode Scanner Configuration ##### Decoder Parameters - UPC/EAN - **supplemental2** (boolean) - Optional - Flag to enable length 2 supplementals. - **supplemental5** (boolean) - Optional - Flag to enable length 5 supplementals. - **supplementalMode** (enum) - Optional - The supplemental mode. - **supplementalRetries** (integer) - Optional - Retry count for auto-discriminating for supplementals. ##### Decoder Parameters - WebCode - **subType** (enum) - Optional - Webcode sub type enabled. ##### OCR Parameters - **subset** (string) - Optional - A custom group of characters in place of a preset font variant. ### Request Example ```json { "skipUnsupportedParameter": true, "smoothEffect": false, "stopBit": "STOPBIT_1", "supplemental2": true, "supplemental5": false, "supplementalMode": "MODE_AUTO", "supplementalRetries": 5, "subType": "TYPE_QR", "subset": "0123456789" } ``` ### Response #### Success Response (200) - **status** (string) - Indicates the success or failure of the configuration update. #### Response Example ```json { "status": "SUCCESS" } ``` ``` -------------------------------- ### Query: Get Key List Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/encryptmgr This endpoint documentation is missing from the provided text. -------------------------------- ### Scanner Parameter Configuration API Usage Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/extended_scanner_parameters APIs for getting and setting scanner parameters. ```APIDOC ## GET /scanner/params ### Description Gets the current value of the specified parameter available at the scanner. ### Method GET ### Endpoint /scanner/params ### Parameters #### Query Parameters - **parameters** (Bundle) - Required - Bundle containing parameter names to retrieve. ### Response #### Success Response (200) - **Bundle** (Bundle) - The current values of the requested parameters. #### Response Example ```json { "remote_trigger_status": "1" } ``` ## POST /scanner/params ### Description Sets the given values to the specified parameters. ### Method POST ### Endpoint /scanner/params ### Parameters #### Request Body - **parameters** (Bundle) - Required - Bundle containing parameter names and their desired values. ### Request Example ```json { "remote_trigger_status": "0" } ``` ### Response #### Success Response (200) - **Void** - Operation successful. #### Response Example (No content on success) ``` -------------------------------- ### Personal Shopper Feature Access Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/personalshopper Demonstrates how to get an instance of the EMDKManager and access the PersonalShopper feature. ```APIDOC ## Get EMDKManager Instance and PersonalShopper Feature ### Description This snippet shows how to obtain the `EMDKManager` instance and then retrieve an instance of the `PersonalShopper` feature class. It also includes a check to see if the feature is supported on the current device. ### Method ```java EMDKManager emdkManager = EMDKManager.getEMDKManager(getApplicationContext(), this); PersonalShopper personalShopper = (PersonalShopper)this.emdkManager.getInstance(FEATURE_TYPE.PERSONALSHOPPER); if(personalShopper == null) { // This feature is not supported on the device in use. } ``` ### Request Example ```json { "example": "EMDKManager emdkManager = EMDKManager.getEMDKManager(getApplicationContext(), this);\nPersonalShopper personalShopper = (PersonalShopper)this.emdkManager.getInstance(FEATURE_TYPE.PERSONALSHOPPER);" } ``` ### Response #### Success Response - **emdkManager** (EMDKManager) - An instance of the EMDKManager. - **personalShopper** (PersonalShopper) - An instance of the PersonalShopper feature class, or null if not supported. #### Response Example ```json { "example": "PersonalShopper personalShopper = ...;\nif (personalShopper != null) {\n // Feature is supported\n}" } ``` ``` -------------------------------- ### Initialize EMDKManager and Implement EMDKListener (Java) Source: https://techdocs.zebra.com/emdk-for-android/11-0/tutorial/tutMxAccessManager This snippet shows how to import necessary EMDK libraries, extend an Activity to implement EMDKListener, and initialize the EMDKManager. It also includes placeholders for callback methods like onClosed and onOpened. ```java import com.symbol.emdk.*; import com.symbol.emdk.EMDKManager.EMDKListener; import android.widget.Toast; public class MainActivity extends Activity implements EMDKListener { @Override public void onClosed() { // TODO Auto-generated method stub } @Override public void onOpened(EMDKManager emdkManager) { // TODO Auto-generated method stub } } ``` -------------------------------- ### Querying Install Apps from Unknown Sources Status Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/devadmin This XML input requests the status of the 'Install Apps from Unknown Sources' setting on an Android device. The query is performed within the `DevAdmin` characteristic, targeting the `UnknownSourcesStatus` parameter. ```xml ``` -------------------------------- ### SAM Operations (Connect, Get Type, Disconnect) Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/samapiusage Demonstrates how to connect to a SAM, retrieve its type, and disconnect. ```APIDOC ## SAM Operations ### Description This section covers the essential operations for managing a SAM connection: connecting to a SAM, checking its type, and disconnecting when finished. Proper connection management is vital for preventing conflicts with other applications. ### Connect to SAM #### Method `connect()` #### Endpoint Accessed via a `SAM` object obtained from `enumerateSAMs()`. #### Parameters None #### Request Example ```java if (!sam.isConnected()) { try { sam.connect(); } catch (SAMException ex) { Log.d(TAG, SAMResults.getErrorDescription(ex.getResult())); return; } } ``` #### Notes - Calling `connect()` on an already connected SAM may throw an exception. - `isConnected()` returns the current connection status. ### Get SAM Type #### Method `getSamType()` #### Endpoint Accessed via a connected `SAM` object. #### Parameters None #### Request Example ```java SAMType samType = sam.getSamType(); // e.g., SAMType.MIFARE, SAMType.CALYPSO, SAMType.FELICA ``` #### Response - `SAMType`: An enum representing the type of the SAM. ### Disconnect SAM #### Method `disconnect()` #### Endpoint Accessed via a connected `SAM` object. #### Parameters None #### Request Example ```java if (sam.isConnected()) { sam.disconnect(); } ``` #### Notes - It is recommended to disconnect the SAM after all communications are completed to allow other applications to use it. ### Error Handling - `SAMException`: May be thrown during `connect()` or `disconnect()` operations due to reasons such as: - The SAM is already connected by the current application. - Another application has an active connection to the SAM. - A different app is connected to the SAM. ``` -------------------------------- ### Start and Cancel SimulScanReader Read Operation Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/simulscan_guide Starts a scan using the SimulScanReader.read() API and provides a method to cancel an ongoing read operation with cancelRead(). It's recommended to check isReadPending() before initiating a new read to avoid failures. The reader must be enabled before calling read(). ```java try { if(!selectedSimulScanReader.isEnabled()) selectedSimulScanReader.enable(); } catch (SimulScanException e) { e.printStackTrace(); } ``` -------------------------------- ### Allow Application Installs from Unknown Sources Source: https://techdocs.zebra.com/emdk-for-android/11-0/mx/devadmin Configures the device to allow application installations from unknown sources using XML. Setting 'UnknownSourcesStatus' to '1' enables this functionality. ```xml ``` -------------------------------- ### Get SAM Slot Index - Java Source: https://techdocs.zebra.com/emdk-for-android/11-0/api/reference/com/symbol/emdk/sam/sam Returns the index of the SAM's slot, starting from 1. This can be used to differentiate between multiple SAMs if supported by the device. ```java public int getSamIndex() ``` -------------------------------- ### Get Newly Connected Scanner using Device Enumeration - Java Source: https://techdocs.zebra.com/emdk-for-android/11-0/guide/extended_scanner_parameters Illustrates how to acquire a scanner that might not be immediately available via device identifiers. It first uses BarcodeManager.getSupportedDevicesInfo() to get a list of all supported scanners and then iterates through this list to find and retrieve a specific scanner (e.g., 'RS6000') using BarcodeManager.getDevice(). ```java List supportedDevList = barcodeManager.getSupportedDevicesInfo(); Scanner scanner = null; Iterator it = deviceList.iterator(); while (it.hasNext()) { ScannerInfo scnInfo = it.next(); if (scnInfo.getFriendlyName().toUpperCase().contains("RS6000")) { scanner = barcodeManager.getDevice(scnInfo); break; } } ```