デバイス管理の概要

デバイス管理のサポート終了。Android 9 以降 (API レベル 28)以降、一部の管理ポリシーは デバイス管理者によって起動されます。この変更への対応をすぐに開始されることをおすすめします。移行オプションについて詳しくは、デバイス管理のサポート終了をご覧ください。

Android は、エンタープライズ アプリ向けに、 Android Device Administration APIDevice Administration API は、デバイス管理機能をシステムレベルで提供しており、これらの API を使用すると、 IT 部門が IT 部門や IT 部門に 専門家は従業員のデバイスを細かく制御する必要があります。たとえば、 組み込みの Android メールアプリでは、これらの API を活用して Exchange のサポート。管理者はメールアプリを使用して、パスワード ポリシー(英数字のパスワードや数字の PIN など)をデバイス全体に適用できます。管理者はリモートワイプ(つまり、 (工場出荷時のデフォルト設定に復元するなど)は、スマートフォンの紛失や盗難にあってもかまいません。Exchange ユーザーが同期できる メールとカレンダーのデータを取得します。

このドキュメントは、Android デバイス向けのエンタープライズ ソリューションを開発するデベロッパーを対象としています。また、Kubernetes クラスタの Device Administration API によって実現され、より強力なセキュリティ Android 搭載の従業員向けデバイスを購入できます。

: Android for Work のデプロイメントに使用する Work Policy Controller を構築する方法については、Device Policy Controller を構築するをご覧ください。

ヘッドレス デバイス所有者モード

Android 14(API レベル 34)では、ヘッドレス システム ユーザー モード( UserManager.isHeadlessSystemUserModetrue を返します。ヘッドレス システム ユーザー モードでは、 バックグラウンド ユーザーであり、エンドユーザーは追加のフォアグラウンド ユーザーに依存 です。Android 14 では、ヘッドレス デバイス所有者提携モードも導入されています。このモードでは、デバイス所有者が設定されているシステム ユーザーを除くすべての提携ユーザーにプロファイル所有者が追加されます。

ヘッドレス システム ユーザー(システム ユーザーが (バックグラウンドで実行)され、スコープがグローバルなデバイス ポリシーのみ (すべてのユーザーに適用されるポリシー)がフォアグラウンド ユーザーに適用される できます。詳しくは、addUserRestriction をご覧ください。

<ph type="x-smartling-placeholder">

Android デバイス メーカーは、source.android.com に公開されているガイダンスを参照できます。

Device Administrator API の概要

以下に Device Administration API を使用するアプリタイプの例を示します。

  • メール クライアント。
  • リモートワイプを行うセキュリティ アプリ。
  • デバイス管理サービスとアプリ。

仕組み

Device Administration API を使用して、ユーザーがデバイスにインストールするデバイス管理アプリを作成します。デバイス管理アプリは、 あります。仕組みは次のとおりです。

  • システム管理者がデバイス管理アプリを作成し、 リモート/ローカル デバイスのセキュリティ ポリシーも適用できます。これらのポリシーは または、アプリがサードパーティからポリシーを動的に取得し、 あります。
  • アプリはユーザーのデバイスにインストールされますが、Android は 自動化されたプロビジョニング ソリューションがありません。システム管理者がアプリをユーザーに配布するには、次のいくつかの方法があります。
    • Google Play。
    • 別のストアからのインストールを有効化する。
    • メールやウェブサイトなどの方法でアプリを配布する。
  • システムからは、ユーザーにデバイス管理アプリを有効にするように求めるプロンプトが表示されます。タイミングと頻度については、アプリの実装方法によって異なります。
  • ユーザーがデバイス管理アプリを有効にすると、 あります。これらのポリシーに準拠することで、通常は次のようなメリットがもたらされます。 機密データへのアクセスを防止できます。

ユーザーがデバイス管理アプリを有効にしていない場合、デバイス管理アプリはデバイスに存在するものの、非アクティブな状態になります。ユーザーはそのポリシーの対象にならず、逆にアプリによるメリットも得られません。たとえば、データの同期が行えなくなる場合があります。

ユーザーがポリシーに準拠できていない場合(たとえば、ユーザーがガイドラインに違反するパスワードを設定した場合)、対処方法はアプリによって決定されますが、通常はユーザーがデータを同期できなくなります。

デバイスが Device Administration API でサポートされていないポリシーを必要とするサーバーに接続しようとすると、接続は許可されません。現在、Device Administration API では部分的なプロビジョニングを許可していないため、デバイス(レガシー デバイスなど)が指定されたポリシーをすべてサポートしていない場合には、デバイスに接続を許可する方法がないということになります。

デバイスに有効な管理アプリが複数ある場合、最も厳しいポリシーが適用されます。 適用されます。特定の管理者をターゲットにする方法はない 。

既存のデバイス管理アプリをアンインストールするには、まずユーザーが管理者として、アプリの登録を解除する必要があります。

ポリシー

企業環境では多くの場合、従業員のデバイスに デバイスの使用を規定する厳格なポリシーを遵守していること。「 Device Administration API は、表 1 に示すポリシーをサポートしています。 なお、画面ロックに関しては、現在、パスワードのみがサポートされています。

表 1. Device Administration API でサポートされるポリシー。

ポリシー 説明
パスワードを有効にする デバイスで PIN やパスワードの要求を必須にします。
最小パスワード長 パスワードに必要な文字数を設定します。たとえば、PIN やパスワードの最小の長さを 6 文字にすることができます。
英数字のパスワードを必須にする 文字と数字を組み合わせたパスワードを必須にします。記号も使用できます。
複雑なパスワードを必須にする 英字、数字、特殊記号を含めたパスワードを必須にします。Android 3.0 で導入されました。
パスワードに最低限必要な英文字の文字数 メッセージの最小数 パスワードの文字数を、すべての管理者または特定の管理者のパスワードに指定します。Android 3.0 で導入されました。
パスワードに最低限必要な小文字の文字数 小文字の最小数 パスワードの文字数を、すべての管理者または特定の管理者のパスワードに指定します。Android 3.0 で導入されました。
パスワードに最低限必要な英文字以外の文字数 メッセージの最小数 すべての管理者または特定の管理者のパスワードに英字以外の文字を使用する必要があります。Android 3.0 で導入されました。
パスワードに最低限必要な数字の文字数 すべての管理者または特定の管理者のパスワードに最低限必要な数字の文字数。Android 3.0 で導入されました。
パスワードに最低限必要な記号の文字数 すべての管理者または特定の管理者のパスワードに最低限必要な記号の文字数。Android 3.0 で導入されました。
パスワードに最低限必要な大文字の文字数 すべての管理者または特定の管理者のパスワードに最低限必要な大文字の文字数。Android 3.0 で導入されました。
パスワードの有効期限 パスワードが期限切れとなる時間。デバイス管理者が設定した有効期限からの差分(ミリ秒単位)として表されます。Android 3.0 で導入されました。
パスワード履歴の制限 このポリシーにより、ユーザーは直近 n 個の一意のパスワードを再利用できなくなります。 通常、このポリシーは setPasswordExpirationTimeout() と組み合わせて使用され、指定された時間が経過するとユーザーにパスワードの更新を強制します。Android 3.0 で導入されました。
パスワード試行の上限回数 パスワード入力を試行できる上限回数を設定します。この回数を超えると、デバイスでデータがワイプされます。Device Administration API を使用すると、管理者はリモートでデバイスを工場出荷時のデフォルトにリセットできます。これにより、 デバイスの紛失や盗難が発生した場合です。
非アクティブでロックされるまでの最大時間 ユーザーが画面に最後に触れたとき、またはボタンを押してからデバイスが画面をロックするまでの時間を設定します。この場合、ユーザーは PIN またはパスワードをもう一度入力しないと、デバイスの使用や データへのアクセスを制御できます。1~60 分の値を指定できます。
ストレージの暗号化を必須にする ストレージ領域の暗号化を指定します(デバイスでサポートされている場合)。 Android 3.0 で導入されました。
カメラを無効にする カメラを無効にすることを指定します。なお、 永久に無効になりますカメラの有効/無効を動的に切り替えられる 基づいて予測を行います。Android 4.0 で導入されました。

その他の機能

本デバイスは、上記の表に記載されているポリシーをサポートすることに加えて、 Administration API を使用すると、次のことができます。

  • ユーザーに新しいパスワードを設定するよう促す。
  • すぐにデバイスをロックする。
  • デバイスのデータをワイプする(デバイスを出荷時のデフォルトに戻す)

サンプルアプリ

このページで使用している例は、Device Administration API に基づいています。 サンプル(SDK サンプルに含まれる)に含まれる Android SDK Manager など)に配置され、システム上に <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java

サンプルアプリにデバイス管理機能のデモがあります。これは、デバイス管理アプリを有効にするユーザー インターフェースを提供します。アプリを有効にすると、ユーザーインターフェースのボタンを使用して次のことを行えます。

  • パスワードのレベルを設定する。
  • 最小の文字数、パスワードに最低限含める必要がある数字の数など、ユーザー パスワードの要件を指定する。
  • パスワードを設定する。パスワードが指定されたポリシーに準拠していない場合は、エラーが返されます。
  • パスワード入力を試行できる上限回数を設定する。この回数を超えると、デバイスがワイプされます(工場出荷時の設定に復元される)。
  • パスワードの有効期限を設定する。
  • パスワードの履歴の数を設定する(ここでいう数は、履歴に保存されるパスワードの世代数を意味します)。これにより、ユーザーは同じリソースを再利用せずに 以前に使用した n 個のパスワードのうちの 1 つ。
  • デバイスでサポートされている場合に、ストレージ領域の暗号化を指定する。
  • デバイスがアクティブでなくなるまでの最長時間を設定します 防ぐことができます。
  • すぐにデバイスをロックする。
  • デバイスのデータをワイプする(出荷時の設定に戻す)。
  • カメラを無効にする。

図 1. サンプルアプリのスクリーンショット

デバイス管理アプリの開発

システム管理者は、Device Administration API を使用してアプリを作成できます。 リモート/ローカル デバイスのセキュリティ ポリシーを適用します。このセクション に、デバイス管理の作成に必要な手順の概要を 。

マニフェストの作成

Device Administration API を使用するには、アプリのマニフェストに次の情報を含める必要があります。

以下は、Device Administration サンプル マニフェストからの抜粋です。

<activity android:name=".app.DeviceAdminSample"
            android:label="@string/activity_sample_device_admin">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.SAMPLE_CODE" />
    </intent-filter>
</activity>
<receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver"
        android:label="@string/sample_device_admin"
        android:description="@string/sample_device_admin_description"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data android:name="android.app.device_admin"
            android:resource="@xml/device_admin_sample" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>
</receiver>

以下の点にご注意ください。

  • 次の属性は、サンプルアプリが存在する文字列リソースを参照します。 ApiDemos/res/values/strings.xml。リソースについて詳しくは、アプリリソースをご覧ください。
    • android:label="@string/activity_sample_device_admin" は、ユーザーが読み取り可能なアクティビティのラベルを指します。
    • android:label="@string/sample_device_admin" は、 ユーザーが読み取り可能な権限のラベル。
    • android:description="@string/sample_device_admin_description" は、ユーザーが読み取り可能な権限の説明を指します。通常、説明文は長く、 より有益 指定します。
  • android:permission="android.permission.BIND_DEVICE_ADMIN" は、システムのみがレシーバとやり取りできるようにするために DeviceAdminReceiver サブクラスに必要な権限です(この権限をアプリに付与することはできません)。この 他のアプリがデバイス管理アプリを悪用するのを防ぐことができます。
  • android.app.action.DEVICE_ADMIN_ENABLED は、DeviceAdminReceiver サブクラスでデバイスを管理できるように処理する必要がある主要アクションです。これは、ユーザーがデバイス管理アプリを有効にすると、レシーバに設定されます。コードでは通常、onEnabled() で処理します。サポートするには、レシーバに BIND_DEVICE_ADMIN 権限も必要です。これにより、他のアプリが不正使用できないようにします。
  • ユーザーがデバイス管理アプリを有効にすると、特定のシステム イベントのブロードキャストに応じてアクションを実行する許可がレシーバに与えられます。対象となるイベントが発生したときに、アプリはポリシーを強制できます。たとえば、ユーザーがポリシー要件を満たさない新しいパスワードを設定しようとすると、要件を満たす別のパスワードを選択するようアプリで求めることができます。
  • アプリの公開後はレシーバ名を変更しないでください。名前が 変更すると、ユーザーがアプリを更新すると、デバイス管理が無効になります。詳しくは、 <receiver>
  • android:resource="@xml/device_admin_sample" は、メタデータで使用されるセキュリティ ポリシーを宣言します。メタデータは、DeviceAdminInfo クラスによって解析されたデバイス管理者に固有の追加情報を提供します。以下に、device_admin_sample.xml の内容を示します。
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-policies>
    <limit-password />
    <watch-login />
    <reset-password />
    <force-lock />
    <wipe-data />
    <expire-password />
    <encrypted-storage />
    <disable-camera />
  </uses-policies>
</device-admin>

デバイス管理アプリを設計する際、すべてのポリシーを含める必要はありません。アプリに関連するポリシーだけを含めます。

マニフェスト ファイルの詳細については、Android デベロッパー ガイドをご覧ください。

コードの実装

Device Administration API には、次のクラスが含まれます。

DeviceAdminReceiver
デバイス管理コンポーネントを実装するための基本クラス。このクラスは、システムによって送信される未処理のインテント アクションを解釈するための便利な機能を提供します。デバイス管理アプリには、 DeviceAdminReceiver サブクラス。
DevicePolicyManager
デバイスに適用されるポリシーを管理するクラス。ほとんどのお客様は このクラスは、ユーザーが公開している DeviceAdminReceiver を あります。DevicePolicyManager は次のポリシーを管理します: 1 つ以上の DeviceAdminReceiver インスタンス
DeviceAdminInfo
このクラスは、メタデータを指定するために使用されます。 デバイス管理者コンポーネントについては

これらのクラスは、デバイス管理アプリが完全に機能する基盤となります。 このセクションの残りの部分では、DeviceAdminReceiver と デバイス管理アプリを作成するための DevicePolicyManager API。

DeviceAdminReceiver のサブクラス化

デバイス管理アプリを作成するには、Terraform で DeviceAdminReceiverDeviceAdminReceiver クラス 特定のイベントが発生したときにトリガーされる 発生しません

DeviceAdminReceiver サブクラスのサンプルアプリは、特定のイベントへの応答として Toast 通知を表示するだけです。例:

KotlinJava
class DeviceAdminSample : DeviceAdminReceiver() {

    private fun showToast(context: Context, msg: String) {
        context.getString(R.string.admin_receiver_status, msg).let { status ->
            Toast.makeText(context, status, Toast.LENGTH_SHORT).show()
        }
    }

    override fun onEnabled(context: Context, intent: Intent) =
            showToast(context, context.getString(R.string.admin_receiver_status_enabled))

    override fun onDisableRequested(context: Context, intent: Intent): CharSequence =
            context.getString(R.string.admin_receiver_status_disable_warning)

    override fun onDisabled(context: Context, intent: Intent) =
            showToast(context, context.getString(R.string.admin_receiver_status_disabled))

    override fun onPasswordChanged(context: Context, intent: Intent, userHandle: UserHandle) =
            showToast(context, context.getString(R.string.admin_receiver_status_pw_changed))
...
}
public class DeviceAdminSample extends DeviceAdminReceiver {

    void showToast(Context context, String msg) {
        String status = context.getString(R.string.admin_receiver_status, msg);
        Toast.makeText(context, status, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onEnabled(Context context, Intent intent) {
        showToast(context, context.getString(R.string.admin_receiver_status_enabled));
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return context.getString(R.string.admin_receiver_status_disable_warning);
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        showToast(context, context.getString(R.string.admin_receiver_status_disabled));
    }

    @Override
    public void onPasswordChanged(Context context, Intent intent, UserHandle userHandle) {
        showToast(context, context.getString(R.string.admin_receiver_status_pw_changed));
    }
...
}

アプリの有効化

デバイス管理アプリが処理しなければならない主要イベントの 1 つに、ユーザーによるアプリの有効化があります。ポリシーを適用するには、ユーザーがアプリを明示的に有効にする必要があります。ユーザーがアプリを有効にしないことを選択した場合 デバイスには引き続き存在しますが、そのポリシーは適用されず、ユーザーは メリットが得られます

ユーザーが ACTION_ADD_DEVICE_ADMIN インテントをトリガーするアクションを実行すると、アプリを有効にするプロセスが開始されます。サンプルアプリでは、ユーザーが [Enable Admin] チェックボックスをオンにすると、このプロセスが発生します。

ユーザーが [Enable Admin] チェックボックスをオンにすると、 デバイス管理アプリを有効にするようユーザーに促すように変更されます。 2.

図 2. サンプルアプリ: アプリの有効化

ユーザーが [Enable Admin] チェックボックスをオンにしたときに実行されるコードを以下に示します。これには、onPreferenceChange() コールバックをトリガーする効果があります。このコールバックは、Preference の値がユーザーによって変更され、設定または永続化(あるいはその両方)されるときに呼び出されます。ユーザーがアプリを有効にすると、 デバイス管理アプリを有効にするようユーザーに促すように変更されます。 2.それ以外の場合は、デバイス管理アプリは無効になります。

KotlinJava
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
    if (super.onPreferenceChange(preference, newValue)) return true
    val value = newValue as Boolean
    if (preference == enableCheckbox) {
        if (value != adminActive) {
            if (value) {
                // Launch the activity to have the user enable our admin.
                val intent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN).apply {
                    putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample)
                    putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                            activity.getString(R.string.add_admin_extra_app_text))
                }
                startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN)
                // return false - don't update checkbox until we're really active
                return false
            } else {
                dpm.removeActiveAdmin(deviceAdminSample)
                enableDeviceCapabilitiesArea(false)
                adminActive = false
            }
        }
    } else if (preference == disableCameraCheckbox) {
        dpm.setCameraDisabled(deviceAdminSample, value)
    }
    return true
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
    if (super.onPreferenceChange(preference, newValue)) {
        return true;
    }
    boolean value = (Boolean) newValue;
    if (preference == enableCheckbox) {
        if (value != adminActive) {
            if (value) {
                // Launch the activity to have the user enable our admin.
                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample);
                intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                        activity.getString(R.string.add_admin_extra_app_text));
                startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN);
                // return false - don't update checkbox until we're really active
                return false;
            } else {
                dpm.removeActiveAdmin(deviceAdminSample);
                enableDeviceCapabilitiesArea(false);
                adminActive = false;
            }
        }
    } else if (preference == disableCameraCheckbox) {
        dpm.setCameraDisabled(deviceAdminSample, value);
    }
    return true;
}

intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample) は、mDeviceAdminSample(つまり、 DeviceAdminReceiver コンポーネントなど)がターゲット ポリシーです。 この行から、図 2 に示すユーザー インターフェースを呼び出し、 システムにデバイス管理者を追加する(または拒否を許可する)。

アプリで、デバイス管理アプリが有効になっていることを条件とする処理を行う必要がある場合、アプリがアクティブであることを確認します。これを行うには、DevicePolicyManager メソッドを使用します。 isAdminActive()。なお、DevicePolicyManagerisAdminActive() メソッドは DeviceAdminReceiver コンポーネントを引数として取ります。

KotlinJava
private lateinit var dpm: DevicePolicyManager
...
private fun isActiveAdmin(): Boolean = dpm.isAdminActive(deviceAdminSample)
DevicePolicyManager dpm;
...
private boolean isActiveAdmin() {
    return dpm.isAdminActive(deviceAdminSample);
}

ポリシーの管理

DevicePolicyManager は、デバイスに適用されているポリシーを管理するためのパブリック クラスです。DevicePolicyManager さんが 1 個のポリシーを管理しています またはそれ以上の DeviceAdminReceiver インスタンス。

DevicePolicyManager を扱う方法を以下に示します。

KotlinJava
dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
DevicePolicyManager dpm =
    (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);

このセクションでは、DevicePolicyManager を使用して以下を行う方法について説明します。 管理タスク:

パスワード ポリシーを設定する

DevicePolicyManager には、以下を設定、適用するための API が含まれています。 デバイス パスワード ポリシー。Device Administration API では、パスワードは 画面ロックこのセクションでは、パスワード関連の一般的なタスクについて説明します。

デバイスのパスワードを設定する

このコードは、パスワードを設定するようユーザーに促すユーザー インターフェースを表示します。

KotlinJava
Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent ->
    startActivity(intent)
}
Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
startActivity(intent);
パスワードのレベルを設定する

パスワードのレベルは、次の DevicePolicyManager 定数のいずれかになります。

PASSWORD_QUALITY_ALPHABETIC
少なくともアルファベット(または他の記号)を含むパスワードを入力する必要があります。
PASSWORD_QUALITY_ALPHANUMERIC
ユーザーは 数字英字の両方(または あります。
PASSWORD_QUALITY_NUMERIC
ユーザーはパスワードを入力する必要があります 数字を含める必要があります。
PASSWORD_QUALITY_COMPLEX
少なくとも文字、数字、特殊記号を含むパスワードを入力する必要があります。
PASSWORD_QUALITY_SOMETHING
なんらかのルールを それが何であるかは関係ありません。
PASSWORD_QUALITY_UNSPECIFIED
このポリシーにはパスワードの要件がありません。

英数字のパスワードを要求するパスワード ポリシーを設定する方法は次のとおりです。

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
パスワード コンテンツ要件を設定する

Android 3.0 以降、DevicePolicyManager クラスには、パスワードの内容を微調整できるメソッドが含まれています。対象 たとえば、パスワードに少なくとも 150 文字 n という大文字アルファベットの使用方法を使用します。以下に、パスワードの内容を微調整する方法を示します。

次のスニペットの例では、パスワードに少なくとも 2 つの大文字が必要であることを示しています。

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwMinUppercase = 2
...
dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwMinUppercase = 2;
...
dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase);
最小パスワード長を設定する

指定した最小値以上のパスワードが必要になるように指定できます あります。例:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwLength: Int = ...
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwLength;
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength);
パスワード試行の上限回数を設定する

パスワード入力を試行できる回数の上限を設定できます。この回数を超えると、デバイスがワイプされます(工場出荷時設定にリセットされます)。例:

KotlinJava
val dPM:DevicePolicyManager
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val maxFailedPw: Int = ...
...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int maxFailedPw;
 ...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw);
パスワードの有効期限を設定する

Android 3.0 以降では、 setPasswordExpirationTimeout() パスワードの有効期限を設定するメソッドです。デバイス管理者が有効期限のタイムアウトを設定した時点からのデルタ(ミリ秒単位)で表されます。例:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwExpiration: Long = ...
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
long pwExpiration;
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration);
履歴に基づいてパスワードを制限する

Android 3.0 以降では、setPasswordHistoryLength() メソッドを使用して以前のパスワード再利用を制限できます。このメソッドは length パラメータを取ります。ここでパスワードの保存世代数を指定します。このポリシーを有効に設定した場合、ユーザーは新しい 最新の n 個のパスワードと一致するパスワードを入力します。これにより、ユーザーは同じパスワードを何度も使用できなくなります。このポリシーは通常、 組み合わせて setPasswordExpirationTimeout()、 これによってユーザーは パスワードを更新するように促します。

次のスニペットの例では、5 回前までのパスワードを再利用できません。

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwHistoryLength = 5
...
dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwHistoryLength = 5;
...
dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength);

デバイスロックを設定する

ユーザーが非アクティブな状態でいる時間の上限を設定できます。この上限値を超えると、デバイスがロックされます。例:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val timeMs: Long = 1000L * timeout.text.toString().toLong()
...
dpm.setMaximumTimeToLock(deviceAdminSample, timeMs)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
long timeMs = 1000L*Long.parseLong(timeout.getText().toString());
dpm.setMaximumTimeToLock(deviceAdminSample, timeMs);

また、次のように、プログラムでデバイスに直ちにロックするよう指示することもできます。

KotlinJava
private lateinit var dpm: DevicePolicyManager
dpm.lockNow()
DevicePolicyManager dpm;
dpm.lockNow();

データのワイプを行う

DevicePolicyManagerwipeData() メソッドを使用して、デバイスを出荷時の設定にリセットできます。役に立った 役立ちます。多くの場合、デバイスのワイプは、 結果を返すことができますたとえば、 setMaximumFailedPasswordsForWipe(): デバイスを使用する必要があることを示す パスワードの入力失敗回数が上限に達するとワイプされます。

以下に、データをワイプする例を示します。

KotlinJava
private lateinit var dpm: DevicePolicyManager
dpm.wipeData(0)
DevicePolicyManager dpm;
dpm.wipeData(0);

wipeData() メソッドは、引数として パラメータに追加オプションのビットマスクを付加します。現在、値は 0 に設定する必要があります。

カメラを無効にする

Android 4.0 以降では、カメラを無効にできます。恒久的に無効化する必要はありません。カメラは、コンテキスト、時間などに基づいて動的に有効または無効にできます。

setCameraDisabled() メソッドを使用して、カメラを無効にするかどうかを制御します。次のスニペットの例では、チェックボックスの設定に基づいてカメラを有効または無効に設定します。

KotlinJava
private lateinit var disableCameraCheckbox: CheckBoxPreference
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked)
private CheckBoxPreference disableCameraCheckbox;
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked());

ストレージの暗号化

Android 3.0 以降では、 setStorageEncryption() メソッドを使用して、ストレージ領域の暗号化を要求するポリシーを設定します(サポートされている場合)。

例:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setStorageEncryption(deviceAdminSample, true)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setStorageEncryption(deviceAdminSample, true);

ストレージ暗号化を有効にする完全な例については、Device Administration API サンプルをご覧ください。

その他のコードサンプル

Android AppRestrictionEnforcer サンプルと DeviceOwner サンプルでは、このページで扱っている API の使用方法をさらに詳しく説明しています。