1

Knox 対応アプリ (KEA) を作成する動作を実行しましたが、デバイスで何も起こらないようです。別のアプリのように動作するだけです。実際に Knox 対応かどうかを確認するにはどうすればよいですか? アプリは独自の Knox コンテナーに配置する必要があることを理解していますか? - それを見つけたり、テストしたりする方法はありますか?

4

2 に答える 2

2

Knox API (標準またはプレミアム) ごとに、Knox が既にアクティブ化されているかどうかを単純に照会する方法はありません。具体的には、単純なブール値の戻り値「knoxlib.isKnoxActivated();」はありません。

まず、Knox アクティベーション プロセスがどのように機能するかを確認します。

  1. Knox 対応アプリは、ELM と KLM (エンタープライズ ライセンス管理および Knox ライセンス管理クラス) の両方に対して「activateLicense」を呼び出す必要があります。

  2. デバイスには、Knox ライセンス サーバーへのネットワーク パスが必要です。これは、Samsung の中央のオンライン サーバーであるか、組織のオンプレミスの Knox ライセンス サーバーであるかに関係ありません。

  3. Knox 対応アプリには、Knox ライセンス サーバーからの応答を受信するためのブロードキャスト レシーバーが必要です。

次のように、ブロードキャスト レシーバーをマニフェストに登録することも忘れないでください。

<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 に答える