支持的平台: Android 12 和 Android 14 Elo 设备,包括 Backpack 4 (标准/价值), I-Series 4 (标准/价值), I-Series 标准, M50, Elo Pay M60, Elo Pay 7”, Elo Pay 22", M100, M100C.
完整参考(知识库 + SDK Javadoc)
APIs 按功能类(系统,网络,包等)组织,以简化发现并加速实现。
全球最佳实践(来自 KB)
-
始终在调用任何 API 之前绑定服务。
不要调用方法直到接收到onServiceConnected()。 -
假设设备策略可以覆盖本地设置。
这对于时间、时区、USB、自助服务模式和应用程序安装尤其适用。 -
在生产环境中使用 NTP 进行时间同步。
除非进行测试,否则避免手动时间配置。 -
了解重置行为。
-
企业重置 清除 Elo 配置和注册状态。
-
恢复出厂设置 擦除 所有用户数据并将设备恢复到出厂状态。
-
-
记录每个 API 调用的结果。
这对于故障排除和升级至关重要。
❗ 重要使用说明
一些 SDK API 需要特定的 Android 权限,并且可能在设备处于 EloView 模式或 Android 主页模式时表现不同。 设备策略执行可能会覆盖本地应用的设置。开发人员在生产应用中调用 API 之前应验证设备模式和权限状态。
EloView Home SDK 是基于服务的 Android SDK,要求成功绑定服务后才能执行任何 API 调用。 如果:
- 服务尚未连接
- 设备未处于兼容的 EloView 状态
- 策略限制阻止操作
本指南集中于受支持的和常用的模式。它不会列出原始 SDK Javadoc 中记录的每个 Android 权限、生命周期边界案例或内部返回状态。标准 Android 服务生命周期处理和错误检查必须在生产应用中实现。
常见实际场景(来自 KB)
场景:设备注册后时区不正确
system.setNtpEnabled(true);
system.setNtpServer("time.aws.com");
system.setTimeZone("US/Central");
system.syncTimeNow();
// 验证
String tz = system.getTimeZone();
Log.d(TAG, "Timezone=" + tz);
提示:如果重启后时区恢复,验证 Android 自动时区是否已启用,并确保设备策略没有重新应用不同区域。
场景:安全配置单应用自助服务模式
pkg.setKioskApp("com.example.kiosk");
pkg.setKioskModeEnabled(true);
pkg.launchApp("com.example.kiosk");
警告: 在生产中启用自助服务模式之前存验证管理员逃生路径。
服务绑定示例(来自 KB)
eloView.bindService(context, callback, accessToken);
// 在 callback.onServiceConnected() 中安全调用 SDK APIs
eloView.unbindService(context);
重要说明: bindService() 和 unbindService() 不返回值。必须在调用 onServiceConnected() 后才能调用 SDK APIs。
核心 / 服务绑定 APIs
EloView
EloView 类提供以下操作:
- 使用 setOfflinePlayContent() 设置设备在 EloView 控制模式下播放的内容,当设备离线或未注册到帐户时。
- 使用 getPlayContent() 检索当前在 EloView 控制模式下设置的内容类型(APK 或 WebView)和内容名称。
- 使用 getPlayContentStatus() 获取在 EloView 控制模式下配置内容的当前播放状态。
- 使用 getDeviceCloudStatus() 检查设备当前是否连接到 EloView Cloud(在线或离线)。
- 使用 toggleWifi() 在 Elo 快速设置和 Android 主页模式中切换 Wi-Fi。
- 使用 toggleBT() 在 Elo 快速设置和 Android 主页模式中切换蓝牙。
bindService
public void bindService(android.content.Context context, ServiceConnectionCallback callback, java.lang.String accessToken)
此方法将 EloView 服务绑定到应用程序。必须在调用任何 EloView API 之前调用此方法。
参数
- context – 使用 EloView API 的上下文。
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.bindService(context, callback, "accessToken");
Log.d(TAG, "OK: bindService result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: bindService", e);
}
unbindService
public void unbindService(android.content.Context context)
此方法用于从应用程序中解绑服务。使用此方法在清理资源时从服务中解绑。
参数
- context – 上下文
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.unbindService(context);
Log.d(TAG, "OK: unbindService result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: unbindService", e);
}
setOfflinePlayContent
public java.lang.String setOfflinePlayContent(java.lang.String packageName)
此方法用于在 EloView 控制模式下设置设备内容,当设备处于离线状态或未注册帐户时。如果设备在线并通过 EloView 设置内容,则将覆盖通过此 API 设置的内容。
参数
- packageName – 设置为设备上默认内容的包名。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.setOfflinePlayContent("packageName");
Log.d(TAG, "OK: setOfflinePlayContent result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: setOfflinePlayContent", e);
}
getPlayContent
public java.lang.String getPlayContent()
此方法返回设备上设置的内容类型和内容名称。此方法仅在 EloView 控制模式下工作。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.getPlayContent();
Log.d(TAG, "OK: getPlayContent result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: getPlayContent", e);
}
getPlayContentStatus
public java.lang.String getPlayContentStatus()
此方法返回在控制模式下设备上播放内容的状态。状态可以是以下字符串之一:
YET_TO_DOWNLOAD, DOWNLOADING, DOWNLOADED, INSTALLING, INSTALLED, DOWNLOAD_FAILED, INSTALL_FAILED, UNKNOWN_STATUS
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.getPlayContentStatus();
Log.d(TAG, "OK: getPlayContentStatus result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: getPlayContentStatus", e);
}
getDeviceCloudStatus
public java.lang.String getDeviceCloudStatus()
此方法返回设备的在线或离线状态。状态可以是以下字符串之一: "在线", "离线", "连接中", "重新连接", "在线(未配置)"。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.getDeviceCloudStatus();
Log.d(TAG, "OK: getDeviceCloudStatus result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: getDeviceCloudStatus", e);
}
toggleWifi
void toggleWifi(boolean isEnableWifi)
启用或禁用设备上的 Wi-Fi。这适用于 EloView 模式和 Android 主页模式。
参数
- isEnableWifi – 布尔值,用于启用或禁用快速设置中的 Wi-Fi。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.toggleWifi(true);
Log.d(TAG, "OK: toggleWifi result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: toggleWifi", e);
}
switchToAndroidHomeMode
void switchToAndroidHomeMode() void switchToAndroidHomeMode(boolean isRebootNeeded, boolean isAndroidHomeMode)
此方法用于将设备从 EloView 模式切换到 Android 主页模式。此方法与 switchToAndroidHomeMode() 相同,只是接受两个布尔参数。 无法在不恢复出厂设置的情况下切换回 EloView 模式,因此请谨慎使用。
参数
- 将设备从 EloView 模式切换到 Android 主页模式。
- 如果 isRebootNeeded 设置为 true,设备将重启以应用模式更改。
- 重要说明:切换到 Android 主页模式可能会禁用由 EloView 管理的限制和策略。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.switchToAndroidHomeMode(true, true);
Log.d(TAG, "OK: switchToAndroidHomeMode result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: switchToAndroidHomeMode", e);
}
toggleBT
public int toggleBT(boolean isEnableBT)
此方法用于在快速设置(EloView 模式)中切换蓝牙。也可以用于在 Android 主页模式下切换蓝牙。
参数
- isEnableBT – 布尔值,用于启用或禁用快速设置中的蓝牙。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.toggleBT(true);
Log.d(TAG, "OK: toggleBT result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: toggleBT", e);
}
账户 APIs
AccountManager
AccountManager 类提供以下操作:
1. 基于用户提供的凭据(emailId / password 或 clientId / secretKey)提供来自 EloServer 的身份验证令牌。
2. 验证给定的身份验证令牌是否有效或已过期。身份验证令牌可以是从 EloView 服务器获取的令牌,也可以是由 Elo 支持团队提供的离线 JWT 令牌。 (离线令牌是使用应用程序的包名生成的,仅适用于生成它的包。)
3. 所有 API 都需要离线令牌才能工作,在线令牌无法使用。唯一的例外是 OTA API。OTA API 在从 EloView 服务器应用 OTA 时需要在线令牌。通过自定义服务器 URL 或从设备上的本地文件应用 OTA 时,可以使用离线令牌。
例如,获取身份验证令牌:
1. 使用 emailId 和密码调用 getEloAccessToken。 2. 使用 clientId 和 secretKey 调用 getEloOAuthToken。在身份验证成功后,这些方法将返回一个令牌。 3. 对于离线 JWT 令牌,请联系 Elo 支持团队。
从服务器或支持团队检索的令牌使用 method verifyEloToken 进行验证。
使用 method unregisterAccountManagerListener 注销使用这些 AccountManager API 的广播接收器,在使用这些 API 的活动的 onPause 和 onDestroy 方法中调用此方法以避免泄漏。
getProperty
public static java.lang.String getProperty()
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.getProperty();
Log.d(TAG, "OK: getProperty result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: getProperty", e);
}
setProperty
public void setProperty(java.lang.String property)
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.setProperty("property");
Log.d(TAG, "OK: setProperty result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: setProperty", e);
}
getClientId
public static java.lang.String getClientId()
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.getClientId();
Log.d(TAG, "OK: getClientId result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: getClientId", e);
}
getBaseUri
public static android.net.Uri getBaseUri()
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.getBaseUri();
Log.d(TAG, "OK: getBaseUri result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: getBaseUri", e);
}
getEloAccessToken
public void getEloAccessToken(android.content.Context context, java.lang.String userEmail, java.lang.String password, android.os.Handler handler)
此方法用于从 Elo 服务器获取访问令牌。
参数
- context – 调用类的上下文对象(活动或服务)。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.getEloAccessToken(context, "userEmail", "password", handler);
Log.d(TAG, "OK: getEloAccessToken result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: getEloAccessToken", e);
}
configureOAuthHostedUI
public void configureOAuthHostedUI(android.app.Activity activity, android.os.Handler handler)
此方法用于初始化 OAuth 托管 UI。
参数
- activity – 调用类的活动实例。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.configureOAuthHostedUI(activity, handler);
Log.d(TAG, "OK: configureOAuthHostedUI result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: configureOAuthHostedUI", e);
}
stopOAuth
public void stopOAuth()
在活动的 onStop() 重写方法中调用 stopOAuth。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.stopOAuth();
Log.d(TAG, "OK: stopOAuth result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: stopOAuth", e);
}
destroyOAuth
public void destroyOAuth()
在活动的 onStop() 重写方法中调用 destroyOAuth。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.destroyOAuth();
Log.d(TAG, "OK: destroyOAuth result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: destroyOAuth", e);
}
logoutOAuth
public void logoutOAuth()
调用 logoutOAuth 以结束当前登录会话。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.logoutOAuth();
Log.d(TAG, "OK: logoutOAuth result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: logoutOAuth", e);
}
verifyEloToken
public void verifyEloToken(android.content.Context context, java.lang.String accessToken, android.os.Handler handler)
此函数请求 Elo 服务器验证给定的令牌。在成功验证后,处理器将接收到 TOKEN_VERIFY_SUCCESS 消息。 如果失败,将收到 TOKEN_VERIFY_FAIL 消息。
参数
- context – 调用类的上下文对象(活动或服务)。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.verifyEloToken(context, "accessToken", handler);
Log.d(TAG, "OK: verifyEloToken result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: verifyEloToken", e);
}
getEloOAuthToken
public void getEloOAuthToken(android.content.Context context, java.lang.String clientID, java.lang.String secret, android.os.Handler handler)
此方法用于向 EloView 门户请求新的 OAuth 令牌。经过成功的身份验证,令牌将发送到设备。此令牌在发出后有效,使用 24 小时。 当令牌过期时,进一步尝试验证令牌和调用 API 将获得 TOKEN_VERIFY_FAIL 响应。 如果从未获得或接收到令牌,则情况也是如此。
如果成功,处理器将收到类型为 OAUTH_TOKEN_VALID 的消息,并带有 JWT 令牌作为响应。 下面是成功响应的示例:
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlJQTSJ9.eyJ1ZW1haWwiOiJwcmF0YXBlbG8rUHJvZEBnbWFpbC5jb20iLCJvdGl0bGUiOiJwcmF0YXBlbG8rUHJvZEBnbWFpbC5jb20iLCJjYXAiOnsiY3JjIjoiSDIvb2RnIiwicGVybSI6ImZmZmZmZmYwMCJ9LCJpYXQiOjE1MjUxMTc4NDgsIm5iZiI6MTUyNTExNzg0OCwiZXhwIjoxNTI1MjA0MjQ4LCJpc3MiOiIxNTAyIiwic3ViIjoiZWVhNDRkY2JkMjU5YzQyOWY4NTA3YWZhNTQyY2Q3M2YiLCJqdGkiOiJ2ZE14N1ppUGVnWT0ifQ.b2e-F1mVh0ummkBJk3m8pT2qSCceRxuS_A9GAKtYBeo"
在由于错误的 clientID 或 secretID 导致的身份验证失败的情况下,处理器将收到类型为 OAUTH_TOKEN_INVALID 的消息。
参数
- context – 调用类的上下文对象(活动或服务)。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.getEloOAuthToken(context, "clientID", "secret", handler);
Log.d(TAG, "OK: getEloOAuthToken result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: getEloOAuthToken", e);
}
unregisterAccountManagerListener
public void unregisterAccountManagerListener(android.content.Context context)
此方法用于注销使用这些 AccountManager API 注册的广播接收器。在使用这些 API 的活动的 onPause 和 onDestroy 方法中调用此方法以避免泄漏。
参数
- context – 使用系统 API 的上下文。
- context – 用于注销帐户管理器侦听器的 Android 上下文。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.unregisterAccountManagerListener(context);
Log.d(TAG, "OK: unregisterAccountManagerListener result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: unregisterAccountManagerListener", e);
}
setDefaultEnvironment
public void setDefaultEnvironment(android.content.Context ctx)
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.setDefaultEnvironment(context);
Log.d(TAG, "OK: setDefaultEnvironment result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: setDefaultEnvironment", e);
}
selectEnvironment
public void selectEnvironment(android.content.Context ctx, java.lang.String prop, boolean isSealed)
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.selectEnvironment(context, "prop", true);
Log.d(TAG, "OK: selectEnvironment result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: selectEnvironment", e);
}
isPolarisLocked
public boolean isPolarisLocked(android.content.Context context)
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.isPolarisLocked(context);
Log.d(TAG, "OK: isPolarisLocked result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: isPolarisLocked", e);
}
getEnvironment
public java.lang.String getEnvironment(android.content.Context ctx)
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.getEnvironment(context);
Log.d(TAG, "OK: getEnvironment result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: getEnvironment", e);
}
isPolaris
public boolean isPolaris(android.content.Context context)
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.isPolaris(context);
Log.d(TAG, "OK: isPolaris result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: isPolaris", e);
}
TokenListener
TokenListener 监听 AuthenticationToken 验证事件,并在有效令牌时提供成功响应以执行进一步操作。
没有为此类型记录方法。
系统 APIs
ServiceConnectionCallback
onServiceConnected
void onServiceConnected()
当服务在调用 bindService 后连接时调用此方法。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.onServiceConnected();
Log.d(TAG, "OK: onServiceConnected result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: onServiceConnected", e);
}
onServiceDisconnected
void onServiceDisconnected()
当服务断开连接时调用此方法。如果通过 unbindService 解绑服务,则不会调用此方法。
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.onServiceDisconnected();
Log.d(TAG, "OK: onServiceDisconnected result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: onServiceDisconnected", e);
}
系统
系统类提供以下操作:
-
使用
getEloAccessToken获取身份验证令牌。 -
使用
captureScreenShot捕获设备屏幕截图。 -
使用
setOrientation设置设备方向(纵向,横向,反向纵向,反向横向)。 -
使用
getOrientation获取设备方向。 -
使用
factoryReset恢复出厂设置。 -
使用
silentReboot静默重启设备。 -
使用
setNavigationBarEnabled启用或禁用导航栏。 -
使用
setStatusBarEnabled启用或禁用状态栏。 -
使用
setGrantAllAppPermissionEnabled授予所有运行时权限。 -
使用
getNavigationBarEnabled获取导航栏状态。 -
使用
getStatusBarEnabled获取状态栏状态。 -
使用
getGrantAllAppPermissionEnabled获取授予所有应用权限的状态。 -
使用
setIdleModeEnabled启用或禁用空闲模式。 -
使用
setLocationEnabled启用或禁用位置。 -
使用
setMicrophoneMuteEnabled静音或取消静音麦克风。 -
使用
setPasswordEnabled启用或禁用密码可见性。 -
使用
setPlayProtect启用或禁用 Play Protect。 -
使用
setDpi设置和获取屏幕 DPI。 -
使用
setLanguage设置和获取语言。 -
使用
setDateTime设置日期和时间。
getDeviceInfo
返回设备信息的 JSON 对象。
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.getDeviceInfo();
Log.d(TAG, "OK: getDeviceInfo result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: getDeviceInfo", e);
}
畅通 API
常量
提供设备标识、迁移状态检查和 Elo 特定意图创建的辅助方法。
isDevice7Inch
public static boolean isDevice7Inch()
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.isDevice7Inch();
Log.d(TAG, "OK: isDevice7Inch result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: isDevice7Inch", e);
}
isDeviceM100
public static boolean isDeviceM100()
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.isDeviceM100();
Log.d(TAG, "OK: isDeviceM100 result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: isDeviceM100", e);
}
getMigrate
public org.json.JSONObject getMigrate(android.content.Context context)
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.getMigrate(context);
Log.d(TAG, "OK: getMigrate result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: getMigrate", e);
}
getEloIntentWithFlag
public android.content.Intent getEloIntentWithFlag(android.content.Context context, java.lang.String token, java.lang.String action)
示例
try {
// TODO: 确保在调用 SDK APIs 之前绑定了服务
Object result = sdk.getEloIntentWithFlag(context, "token", "action");
Log.d(TAG, "OK: getEloIntentWithFlag result=" + result);
} catch (Exception e) {
Log.e(TAG, "FAIL: getEloIntentWithFlag", e);
}
Please report any broken links by emailing support@elotouch.com and include a link to the knowledge article