Set up EDU SDK

With the Samsung EDU SDK, you can develop apps that enable teachers to use a master device to control student devices, share files, and promote group activities. To enable this type of device management, however, your app needs the following:

  • System-level Android permissions — Traditionally, Android apps controlled devices at the system level using the Device Administration (DA) API. However, with Android P's DA deprecation, the recommended method is using Android Enterprise, to set up either a managed device (as a Device Owner) or work profile (as a Profile Owner). For details, see the Android Enterprise Developer Guide.
  • Samsung EDU license key — This grants you permission to call the privileged APIs in the Samsung EDU SDK. You must activate your key in your Android app to identify yourself. Details are provided below.

Get an EDU license key

Before you begin, ensure you get an EDU license key.

Add the EDU SDK to your Android project

The EDU SDK is shipped in ZIP package that contains the SDK repository, a sample application, Javadocs API Reference, and Developer Guide.

To use the EDU SDK, you need to add the SDK repository in your project or install it in your local Maven repository.

  1. Add the SDK repository by performing the following steps:
    1. Extract the EDU SDK ZIP package into a local folder.
    2. Create a system environment variable, for example EDUSDK_PATH, that identifies the path to the local folder.
    3. Edit the build.gradle file and add the EDU SDK repository:
    4. repositories {
        maven {
          url "${ EDUSDK_PATH }/repository"
    5. Add the EDU SDK to your dependencies, for example,
    6. dependencies {
       implementation ''
  2. Build your project.

Activate your license

You can activate your license as follows.

LicenseManageAgent licenseAgent = (LicenseManageAgent) agentManager.getAgent(AgentConstants.LICENSE_AGENT);
if (!licenseAgent.isActivated()) {
  licenseAgent.activateLicense(AppConstant.MDM_LICENSE_KEY, new MdmLicenseActivationListener());

For information on the API methods, see LicenseManageAgent.

Initialize the EDU SDK

Call the initialization API method in the EDU SDK. This creates an AgentManager object in your application code:

SamsungEducation samsungEducation = new SamsungEducation();
try {
} catch (SsdkUnsupportedException e) {

The above code is a synchronous method which initializes the following components:

  • ServiceMain — Initializes all the service managers of the library and can be accessed only by the agents
  • NETWORK — For all network operations
  • DISCOVERY — For discovering nearby EDU SDK users
  • SCREENSHARE — For screen share activities in the SDK
  • FILESHARE — For file share across SDK users
  • SCREEN — For screen capture related activities
  • SYSTEM — For fetching system related information
  • DEVICE — For controlling/managing remote device and related operations
  • HTTP — For HTTP-based operations
  • ServiceBroker — Gives limited access to use service features without creating an agent for non-agent components

(Optional for the MDM support) Register the app for DEVICE_ADMIN privileges.

Assign the Device Admin Policy:

if (agentManager.usingSamsungEPMode()) {
  devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);

  component = new ComponentName(this, AdminReceiver.class);

  if (!devicePolicyManager.isAdminActive(component)) {
    MLog.i(TAG, "No admin.");
    Intent policyIntent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);

    policyIntent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, component);

    startActivityForResult(policyIntent, REQUEST_CODE_ENABLE_ADMIN);

Add an entry in Android manifest:

<receiver android:name=""
 android:permission="android.permission.BIND_DEVICE_ADMIN" >
 <meta-data android:name=""
  android:resource="@xml/device_admin" />
   <action android:name="" />

Add entry in XML (res/xml/device_admin):

<device-admin xmlns:android="">
  <force-lock />

Activate the app with the license that was received in the MDM Integration section. Internet connection is required for the activation.

LicenseManageAgent licenseAgent = (LicenseManageAgent) agentManager.getAgent(AgentConstants.LICENSE_AGENT);
if (!licenseAgent.isActivated()) {
  licenseAgent.activateLicense(AppConstant.MDM_LICENSE_KEY, new MdmLicenseActivationListener());

Add Android manifest entries into the application:

<!-- BLE -->
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

<!-- Network -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />

<!-- MDM permissions -->
<uses-permission android:name="android.permission.sec.ENTERPRISE_DEVICE_ADMIN" />
<uses-permission android:name="android.permission.sec.MDM_FIREWALL" />
<uses-permission android:name="android.permission.sec.MDM_HW_CONTROL" />
<uses-permission android:name="android.permission.sec.MDM_KIOSK_MODE" />
<uses-permission android:name="android.permission.sec.MDM_RESTRICTION" />
<uses-permission android:name="android.permission.sec.MDM_SECURITY" />
<uses-permission android:name="android.permission.sec.MDM_REMOTE_CONTROL" />
<uses-permission android:name="android.permission.sec.KNOX_REMOTE_CONTROL" />
<uses-permission android:name="android.permission.sec.MDM_APP_MGMT" />
<uses-permission android:name="android.permission.sec.MDM_LOCATION" />
<uses-permission android:name="android.permission.sec.MDM_DATE_TIME" />
<uses-permission android:name="android.permission.sec.MDM_WIFI" />
<uses-permission android:name="android.permission.sec.MDM_BLUETOOTH" />