我刚刚完成了制作Knox Enabled App(KEA)的动作,并且设备上似乎没有任何事情发生 - 它只是像其他应用程序一样运行。如何判断是否实际上启用了Knox?我知道我的应用程序应该在他们自己的Knox容器中吗? - 有没有办法找到它或测试它?
答案 0 :(得分:1)
根据Knox API(标准版或高级版),无法简单地查询Knox是否已被激活。具体来说,没有简单的布尔返回“knoxlib.isKnoxActivated();”
首先,让我回顾一下Knox激活过程的工作原理:
您的Knox Enabled应用程序需要为ELM和& KLM(企业许可证管理和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();
}
}
答案 1 :(得分:0)
请注意-先前的答案需要互联网连接。
如果您部署的解决方案使用KNOX OnPremise许可证服务器(而不是基于云/ Internet的选件),则需要与本地服务器的网络连接。