기기 관리자 개요

기기 관리자 지원 중단. Android 9부터 (API 수준 28)에 따라 일부 관리자 정책은 지원 중단으로 표시됩니다. 호출됩니다. 이제 이 변경 사항에 대응할 준비를 하는 것이 좋습니다. 배우기 위해 마이그레이션 옵션을 확인하려면 <ph type="x-smartling-placeholder"></ph> 기기 관리자 지원 중단.

Android는 Android Device Administration API를 제공하여 엔터프라이즈 앱을 지원합니다. Device Administration API는 시스템 수준에서 기기 관리 기능을 제공합니다. 이 API를 사용하면 IT 전문가가 직원 기기를 철저하게 제어해야 하는 기업 환경에 유용한 보안 인식 앱을 만들 수 있습니다. 예를 들어 이메일 앱의 내장형 Android 이메일 앱은 이러한 API를 Exchange 지원 Exchange 관리자는 이메일 앱을 통해 기기 전반에 영숫자 비밀번호 또는 숫자 PIN 등의 비밀번호 정책을 시행할 수 있습니다. 관리자는 분실하거나 도난당한 휴대전화를 원격 초기화(즉, 출고 시 기본값으로 복원)할 수도 있습니다. Exchange 사용자는 이메일 및 캘린더 데이터를 동기화할 수 있습니다.

이 문서는 Android 지원 기기의 기업용 솔루션을 개발하려는 개발자를 대상으로 합니다. Kubernetes와 같은 다양한 기능을 기기에 더 강력한 보안을 제공하기 위해 Device Administration API에서 제공하는 직원 기기에서 Android로 구동했습니다.

참고: 업무 정책 수립에 대한 자세한 내용은 Android for Work 배포를 위한 컨트롤러는 다음을 참조하세요. 기기 정책 컨트롤러를 빌드합니다.

헤드리스 기기 소유자 모드

Android 14 (API 수준 34)에는 헤드리스 시스템 사용자 모드( 어떤 UserManager.isHeadlessSystemUserModetrue을 반환합니다.) 헤드리스 시스템 사용자 모드에서 시스템 사용자는 백그라운드 사용자이며 최종 사용자를 위해 추가 포그라운드 사용자에게 의존 상호작용하지 않습니다. 또한 Android 14에서는 기기 소유자가 설정된 시스템 사용자 외에 모든 제휴 사용자에 프로필 소유자를 추가하는 헤드리스 기기 소유자 제휴 모드를 도입합니다.

헤드리스 시스템 사용자로 구성된 기기 (시스템 사용자가 백그라운드에서 실행), 범위 내 전역인 기기 정책만 지원 (모든 사용자에게 적용되는 정책)이 포그라운드 사용자에게 적용됩니다. 생성할 수 있습니다. 자세한 내용은 addUserRestriction 참조하세요.

Android 기기 제조업체는 안내 source.android.com에 게시되었습니다.

Device Administration API 개요

다음은 Device Administration API를 사용할 수 있는 앱 유형의 예입니다.

  • 이메일 클라이언트
  • 원격 초기화를 실행하는 보안 앱
  • 기기 관리 서비스 및 앱

기본 원리

Device Administration API를 사용하여 사용자가 관리 중인 기기 관리자 앱을 작성합니다. 할 수 있습니다. 기기 관리자 앱은 사용자가 정책 작동 방식은 다음과 같습니다.

  • 시스템 관리자는 원격/로컬 장치 보안 정책 이 정책은 앱에 하드 코딩되거나, 앱이 서드 파티 서버에서 동적으로 정책을 가져올 수 있습니다.
  • 이 사용자의 기기에 설치됩니다. Android는 현재 자동화된 프로비저닝 솔루션이 없음 시스템 관리자가 앱을 사용자에게 배포할 수 있는 몇 가지 방법은 다음과 같습니다.
    • Google Play.
    • 다른 스토어에서 설치하도록 사용 설정
    • 이메일이나 웹사이트와 같은 다른 수단을 통해 앱을 배포
  • 시스템은 사용자가 기기 관리자 앱을 사용 설정하도록 메시지를 표시합니다. 이 메시지가 표시되는 방법과 시기는 앱을 구현한 방식에 따라 다릅니다.
  • 사용자가 기기 관리자 앱을 한번 사용 설정하면 앱의 정책에 따라 관리됩니다. 일반적으로 이 정책을 준수하면 민감한 시스템 및 데이터에 액세스하는 것과 같은 혜택이 제공됩니다.

사용자가 기기 관리자 앱을 사용 설정하지 않으면 앱은 기기에 비활성 상태로 남아 있습니다. 사용자는 앱 정책의 적용을 받지 않고 반대로 앱의 혜택도 받지 않습니다(예: 데이터 동기화를 사용할 수 없을 수도 있음).

사용자가 정책을 준수하지 않는 경우(예: 사용자가 가이드라인을 위반하는 비밀번호를 설정한 경우) 이를 처리하는 방법은 앱에서 결정합니다. 그러나 일반적으로 이렇게 하면 사용자가 데이터를 동기화할 수 있습니다.

기기가 Device Administration API에서 지원하지 않는 정책을 요구하는 서버에 연결을 시도한다면 연결은 허용되지 않습니다. Device Administration API는 현재 프로비저닝할 수 있습니다 즉, 기기(예: 기존 기기)에서 명시된 정책을 모두 지원하지 않는다면 기기가 연결되도록 허용할 방법은 없습니다.

기기에서 사용 설정된 관리자 앱을 여러 개 포함한다면 가장 엄격한 정책이 시행됩니다. 특정 관리자를 타겟팅할 수 있는 방법이 없음 있습니다.

기존 기기 관리자 앱을 제거하려면 사용자가 다음 작업을 수행해야 합니다. 관리자 권한으로 앱을 등록 취소해야 합니다.

정책

기업 환경에서는 직원 기기가 기기 사용을 관리하는 엄격한 정책을 준수해야 하는 경우가 많습니다. Device Administration API는 표 1에 나열된 정책을 지원합니다. Device Administration API는 현재 화면의 비밀번호만 지원합니다. 잠금:

표 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. 샘플 앱 스크린샷

기기 관리자 앱 개발

시스템 관리자는 Device Administration API를 사용하여 앱을 작성할 수 있습니다. 원격/로컬 기기 보안 정책 시행을 적용합니다. 이 섹션 에는 장치 관리 생성과 관련된 단계가 요약되어 있습니다. 있습니다.

매니페스트 생성

Device Administration API를 사용하려면 앱의 매니페스트에 다음이 포함되어야 합니다.

다음은 기기 관리자 샘플 manifest에서 발췌한 내용입니다.

<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_ENABLEDDeviceAdminReceiver 서브클래스가 기기를 관리할 수 있도록 처리해야 하는 기본 작업입니다. 이 작업은 사용자가 기기 관리자 앱을 사용 설정하면 수신기에 설정됩니다. 일반적으로 코드는 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
기기 관리자 구성요소를 구현하기 위한 기본 클래스입니다. 이 클래스는 API 호출로 전송된 원시 인텐트 작업을 있습니다. 기기 관리자 앱은 DeviceAdminReceiver 서브클래스를 포함해야 합니다.
DevicePolicyManager
기기에서 시행되는 정책을 관리하는 클래스입니다. 대부분의 클라이언트들은 이 클래스는 사용자가 게시 중단한 DeviceAdminReceiver 이(가) 현재 사용 설정되어 있습니다. DevicePolicyManager는 하나 이상의 DeviceAdminReceiver 인스턴스의 정책을 관리합니다.
DeviceAdminInfo
이 클래스는 메타데이터를 지정하는 데 사용됩니다. 구성 요소가 있습니다.

이러한 클래스는 모든 기능을 갖춘 기기 관리 앱의 기반을 제공합니다. 이 섹션의 나머지 부분에서는 DeviceAdminReceiver 및 기기 관리자 앱을 작성하는 DevicePolicyManager API

DeviceAdminReceiver 서브클래스 만들기

기기 관리자 앱을 만들려면 서브클래스를 만들어야 합니다. DeviceAdminReceiver DeviceAdminReceiver 클래스는 특정 이벤트가 발생했을 때 트리거되는 일련의 콜백으로 구성됩니다.

DeviceAdminReceiver 서브클래스에서 샘플 앱은 단순히 특정 응답의 응답으로 Toast 알림을 표시합니다. 이벤트를 수신합니다. 예를 들면 다음과 같습니다.

Kotlin자바
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));
    }
...
}

앱 사용 설정

기기 관리자 앱이 처리해야 하는 주요 이벤트 중 하나는 사용자가 앱을 사용 설정하는 것입니다. 사용자는 정책을 시행하기 위해 앱을 명시적으로 사용 설정해야 합니다. 사용자가 앱을 사용 설정하지 않는 경우 기기에 계속 존재하지만 정책은 시행되지 않으며 사용자는 앱의 혜택을 누릴 수 있습니다.

앱을 사용 설정하는 프로세스는 사용자가 ACTION_ADD_DEVICE_ADMIN를 트리거하는 작업 인텐트를 지정할 수 있습니다. 샘플 앱에서 사용자가 관리자 사용 설정 체크박스를 클릭하면 프로세스가 시작됩니다.

사용자가 관리자 사용 설정 체크박스를 클릭하면 그림과 같이 사용자에게 기기 관리자 앱을 활성화하라는 메시지를 표시하도록 변경 2.

그림 2. 샘플 앱: 앱 활성화

다음은 사용자가 관리자 사용 설정 체크박스를 클릭할 때 실행되는 코드입니다. 이렇게 하면 onPreferenceChange() 콜백을 트리거하는 효과가 있습니다. 사용자가 이 Preference의 값을 변경하고 이 값이 곧 설정 또는 유지될 때 이 콜백이 호출됩니다. 사용자가 앱을 사용 설정하고 있으면 그림 2와 같이 화면이 변경되어 사용자에게 기기 관리자 앱을 활성화하라는 메시지가 표시됩니다. 활성화하지 않으면 기기 관리자 앱이 중지됩니다.

Kotlin자바
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()입니다. DevicePolicyManager 메서드 isAdminActive()DeviceAdminReceiver 구성요소를 인수로 취합니다.

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

정책 관리

DevicePolicyManager는 기기에서 시행되는 정책을 관리하는 공개 클래스입니다. DevicePolicyManager에서 단일 계정의 정책을 관리함 DeviceAdminReceiver 인스턴스 이상

다음과 같이 DevicePolicyManager에 관한 핸들을 가져옵니다.

Kotlin자바
dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
DevicePolicyManager dpm =
    (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);

이 섹션에서는 DevicePolicyManager를 사용하여 관리 작업:

비밀번호 정책 설정

DevicePolicyManager에는 기기 비밀번호 정책 Device Administration API에서 비밀번호는 화면 잠금을 탭합니다. 이 섹션에서는 비밀번호와 관련된 일반적인 작업을 설명합니다.

기기의 비밀번호 설정

이 코드는 사용자에게 비밀번호를 설정하도록 메시지를 표시하는 사용자 인터페이스를 표시합니다.

Kotlin자바
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
정책에는 비밀번호에 관한 요구사항이 없습니다.

예를 들어, 아래 코드는 영숫자 비밀번호를 요구하는 비밀번호 정책을 설정하는 방법입니다.

Kotlin자바
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 클래스에 비밀번호의 콘텐츠를 세부적으로 조정할 수 있는 메서드가 포함되어 있습니다. 예를 들어 비밀번호에 최소 n 개 이상의 대문자가 포함되어야 한다는 정책을 설정할 수 있습니다. 다음은 비밀번호의 콘텐츠를 세부적으로 조정하는 방법입니다.

예를 들어, 이 스니펫은 비밀번호에 최소한 2개 이상의 대문자가 있어야 하는 것을 나타냅니다.

Kotlin자바
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);
비밀번호의 최소 길이 설정

비밀번호가 지정된 최소 길이 이상이어야 한다는 것을 지정할 수 있습니다. 예를 들면 다음과 같습니다.

Kotlin자바
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);
잘못된 비밀번호를 시도할 수 있는 최대 횟수 설정

기기가 초기화(즉, 출고 시 설정값으로 재설정)되기 전에 잘못된 비밀번호 입력을 시도할 수 있는 최대 횟수를 설정할 수 있습니다. 예를 들면 다음과 같습니다.

Kotlin자바
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() 메서드로, 기기 관리자가 만료 시간 제한을 설정한 시점부터 밀리초 단위의 델타로 표시됩니다. 예를 들면 다음과 같습니다.

Kotlin자바
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개의 비밀번호를 재사용하지 못하도록 합니다.

Kotlin자바
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);

기기 잠금 설정

기기 잠금. 예를 들면 다음과 같습니다.

Kotlin자바
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);

프로그래밍 방식으로 기기를 잠그도록 기기에 즉시 알릴 수도 있습니다.

Kotlin자바
private lateinit var dpm: DevicePolicyManager
dpm.lockNow()
DevicePolicyManager dpm;
dpm.lockNow();

데이터 초기화 실행

DevicePolicyManager 메서드를 사용하면 됩니다. wipeData()하여 기기를 초기화합니다. 이는 기기를 분실하거나 도난당한 경우에 유용합니다. 기기를 초기화하려는 결정은 특정 조건이 충족된 결과인 경우가 많습니다. 예를 들어 setMaximumFailedPasswordsForWipe(): 기기가 비밀번호 시도에 특정 횟수만큼 실패하면 초기화됩니다.

다음과 같이 데이터를 완전히 삭제합니다.

Kotlin자바
private lateinit var dpm: DevicePolicyManager
dpm.wipeData(0)
DevicePolicyManager dpm;
dpm.wipeData(0);

wipeData() 메서드는 추가 옵션의 비트 마스크를 매개변수로 취합니다. 현재 값은 0이어야 합니다.

카메라 중지

Android 4.0부터 카메라를 중지할 수 있습니다. 참고로, 영구적으로 중지해야 하는 것은 아닙니다. 카메라는 컨텍스트, 시간 등을 기준으로 동적으로 사용 설정 또는 중지될 수 있습니다.

카메라를 사용 중지할지 여부는 setCameraDisabled() 메서드를 사용하여 지도 가장자리에 패딩을 추가할 수 있습니다. 예를 들어, 이 스니펫은 체크박스 설정에 따라 카메라를 사용 또는 중지로 설정합니다.

Kotlin자바
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() 메서드를 사용하여 저장소 영역의 암호화를 요구하는 정책을 설정할 수 있습니다(지원되는 경우).

예를 들면 다음과 같습니다.

Kotlin자바
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 AppRestrictionEnforcerDeviceOwner 샘플은 이 페이지에서 다룬 API의 사용을 더 자세히 보여줍니다.