我刚刚完成了制作 Knox Enabled App (KEA) 的动作,但设备上似乎没有发生任何事情 - 它就像另一个应用程序一样运行。如何判断 Knox 是否已启用?我了解我的应用程序应该在它们自己的 Knox 容器中?- 有没有办法找出或测试它?
问问题
948 次
2 回答
2
根据 Knox API(标准或高级),无法简单地查询 Knox 是否已激活。具体来说,没有简单的布尔返回“knoxlib.isKnoxActivated();”
首先,让我回顾一下 Knox 激活过程的工作原理:
您的 Knox Enabled 应用程序需要为 ELM 和 KLM(企业许可证管理和 Knox 许可证管理类)调用“activateLicense”。
该设备需要有一个通往 Knox 许可证服务器的网络路径,无论是三星的在线中心服务器,还是您组织的本地 Knox 许可证服务器。
您的 Knox Enabled 应用程序必须具有广播接收器才能接收来自 Knox 许可证服务器的回复。
也不要忘记在 Manifest 中注册广播接收器,如下所示:
<receiver>
android:name=".KnoxLicenseReceiver"
android:enabled="true"
android:exported="true"
<intent-filter>
<action android:name="edm.intent.action.license.status" />
<action android:name="edm.intent.action.knox_license.status" />
</intent-filter>
</receiver>
您的广播接收器类应如下所示。
public class KnoxLicenseReceiver extends BroadcastReceiver {
private final String LOGTAG = KnoxLicenseReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences.Editor sharedPrefEditor = context.getSharedPreferences(Constants.SHARED_PREF_NAME, Context.MODE_PRIVATE).edit();
String action;
int errorCode;
if (intent != null) {
action = intent.getAction();
if (action != null) {
// If received an ELM response
if (EnterpriseLicenseManager.ACTION_LICENSE_STATUS.equals(action)) {
errorCode = intent.getIntExtra(EnterpriseLicenseManager.EXTRA_LICENSE_ERROR_CODE, Constants.DEFAULT_ERROR);
// If successfully activated
if (errorCode == EnterpriseLicenseManager.ERROR_NONE) {
Log.i(LOGTAG, "ELM activated successfully.");
sharedPrefEditor.putBoolean(Constants.ELM_ACTIVATED, true);
} else {
Log.i(LOGTAG, "ELM failed to activate with error code: " + errorCode);
sharedPrefEditor.putBoolean(Constants.ELM_ACTIVATED, false);
}
}
// If received a KLM response
if (KnoxEnterpriseLicenseManager.ACTION_LICENSE_STATUS.equals(action)) {
errorCode = intent.getIntExtra(KnoxEnterpriseLicenseManager.EXTRA_LICENSE_ERROR_CODE, Constants.DEFAULT_ERROR);
// If successfully activated
if (errorCode == KnoxEnterpriseLicenseManager.ERROR_NONE) {
Log.i(LOGTAG, "KLM activated successfully.");
sharedPrefEditor.putBoolean(Constants.KLM_ACTIVATED, true);
} else {
Log.i(LOGTAG, "KLM failed to activate with error code: " + errorCode);
sharedPrefEditor.putBoolean(Constants.KLM_ACTIVATED, false);
}
}
}
}
// Store shared pref changes
sharedPrefEditor.apply();
}
}
于 2017-10-13T14:28:54.327 回答
0
请注意 - 以前的答案需要互联网连接。
如果您部署的解决方案使用 KNOX OnPremise 许可证服务器(而不是基于云的/Internet 选项),您将需要与 On-Premise 服务器的网络连接。
于 2018-10-01T16:25:39.337 回答