如何测试Knox Enabled App是否启用了knox

时间:2017-10-02 16:10:36

标签: android samsung-knox

我刚刚完成了制作Knox Enabled App(KEA)的动作,并且设备上似乎没有任何事情发生 - 它只是像其他应用程序一样运行。如何判断是否实际上启用了Knox?我知道我的应用程序应该在他们自己的Knox容器中吗? - 有没有办法找到它或测试它?

2 个答案:

答案 0 :(得分:1)

根据Knox API(标准版或高级版),无法简单地查询Knox是否已被激活。具体来说,没有简单的布尔返回“knoxlib.isKnoxActivated();”

首先,让我回顾一下Knox激活过程的工作原理:

  1. 您的Knox Enabled应用程序需要为ELM和& KLM(企业许可证管理和Knox许可证管理类)。

  2. 设备需要有一个通往Knox许可证服务器的网络路径,无论是三星的在线许可服务器,还是您的组织内部部署诺克斯许可证服务器。

  3. 您的Knox Enabled应用必须有广播接收器才能收到Knox许可证服务器的回复。

  4. 另外不要忘记在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的选件),则需要与本地服务器的网络连接。