기기 관리자 지원 중단. 호출 시 일부 관리자 정책이 지원 중단된 것으로 표시되었습니다. 기기 관리자가 설정합니다. 이전 옵션에 대해 자세히 알아보려면 다음을 참고하세요. <ph type="x-smartling-placeholder"></ph> 기기 관리자 지원 중단.
Android 2.2 (API 수준 8)부터 Android 플랫폼은 시스템 수준 기기 관리를 제공합니다. 기기 관리 API를 통해 기능을 제어할 수 있습니다.
이 강의에서는 기기 관리 정책을 시행하여 해당 콘텐츠를 만드실 수도 있습니다. 구체적으로는 애플리케이션이 표시하기 전에 충분한 강도의 화면 잠금 비밀번호가 설정되도록 해야 합니다. 제한된 콘텐츠를 사용자에게 제공하는 것을 허용하지 않습니다
정책 정의 및 선언
먼저 기능 수준에서 지원할 정책 종류를 정의해야 합니다. 정책은 다음과 같은 영향을 미칠 수 있습니다. 화면 잠금 비밀번호 강도, 만료 시간 제한, 암호화 등을 커버합니다.
애플리케이션에서 시행할 선택한 정책 세트를
res/xml/device_admin.xml
파일. 또한 Android 매니페스트는
선언된 정책이 설정되어 있습니다.
선언된 각 정책은 DevicePolicyManager
에 있는 몇 가지 관련 기기 정책 메서드에 해당합니다 (최소 비밀번호 길이 및 최소 비밀번호 길이 정의).
대문자가 두 가지 예입니다. 애플리케이션이
상응하는 정책이 XML에 선언되지 않으면 런타임 시 SecurityException
이 발생합니다. 기타 권한,
force-lock
와 같은 스테이트리스(Stateless) 컨테이너를 애플리케이션이
다른 종류의 정책 나중에 확인할 수 있듯이 기기 관리자 활성화 프로세스의 일부로
선언된 정책 목록이 시스템 화면에 표시됩니다.
다음 스니펫은 res/xml/device_admin.xml
에서 비밀번호 제한 정책을 선언합니다.
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> </uses-policies> </device-admin>
Android 매니페스트에서 참조된 정책 선언 XML은 다음과 같습니다.
<receiver android:name=".Policy$PolicyAdmin" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
기기 관리 수신자 만들기
지원하겠다고 선언한 정책과 관련된 이벤트에 관한 알림을 받는 기기 관리 broadcast receiver를 만듭니다. 애플리케이션은 선택적으로 콜백 메서드를 재정의할 수 있습니다.
샘플 애플리케이션인 기기 관리자에서 기기 관리자가 기기 관리자를 비활성화하면 공유 환경설정에서 구성된 정책이 삭제됩니다. 동영상, 이미지, 오디오, 동영상을 비즈니스 로직에 집중할 수 있습니다 예를 들어 애플리케이션은 민감한 정보를 삭제하는 조치를 취하여 보안 위험을 완화하기 위한 조치 원격 동기화 비활성화, 관리자에게 알림 등.
broadcast receiver가 작동하려면 위 스니펫에 표시된 대로 Android 매니페스트에 이를 등록해야 합니다.
Kotlin
class PolicyAdmin : DeviceAdminReceiver() { override fun onDisabled(context: Context, intent: Intent) { // Called when the app is about to be deactivated as a device administrator. // Deletes previously stored password policy. super.onDisabled(context, intent) context.getSharedPreferences(APP_PREF, Activity.MODE_PRIVATE).edit().apply { clear() apply() } } }
자바
public static class PolicyAdmin extends DeviceAdminReceiver { @Override public void onDisabled(Context context, Intent intent) { // Called when the app is about to be deactivated as a device administrator. // Deletes previously stored password policy. super.onDisabled(context, intent); SharedPreferences prefs = context.getSharedPreferences(APP_PREF, Activity.MODE_PRIVATE); prefs.edit().clear().commit(); } }
기기 관리자 활성화
정책을 시행하기 전에 사용자는 애플리케이션을 기기로 직접 활성화해야 합니다.
관리자에게 문의하세요 아래 스니펫은
활성화해야 합니다. 강조할 설명 텍스트를 포함하는 것이 좋습니다.
애플리케이션에서 기기 관리자여야 하는 이유를 사용자에게
EXTRA_ADD_EXPLANATION
추가를 포함합니다.
그림 1. 다음 작업을 수행할 수 있는 사용자 활성화 화면 기기 정책에 대한 설명을 제공하세요
Kotlin
if (!policy.isAdminActive()) { val activateDeviceAdminIntent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN) activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_DEVICE_ADMIN, policy.getPolicyAdmin() ) // It is good practice to include the optional explanation text to // explain to user why the application is requesting to be a device // administrator. The system will display this message on the activation // screen. activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_ADD_EXPLANATION, resources.getString(R.string.device_admin_activation_message) ) startActivityForResult(activateDeviceAdminIntent, REQ_ACTIVATE_DEVICE_ADMIN) }
자바
if (!policy.isAdminActive()) { Intent activateDeviceAdminIntent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_DEVICE_ADMIN, policy.getPolicyAdmin()); // It is good practice to include the optional explanation text to // explain to user why the application is requesting to be a device // administrator. The system will display this message on the activation // screen. activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_ADD_EXPLANATION, getResources().getString(R.string.device_admin_activation_message)); startActivityForResult(activateDeviceAdminIntent, REQ_ACTIVATE_DEVICE_ADMIN); }
사용자가 '활성화'를 선택하면 해당 애플리케이션이 기기 관리자가 되어 정책을 구성 및 시행합니다
또한 애플리케이션은 사용자가 중단하는 뒤로 물러나는 상황을 처리할 준비가 되어 있어야 합니다.
취소 버튼, 뒤로 키 또는 홈 키를 눌러 활성화 프로세스를 다시 시작합니다. 따라서
정책 설정 활동의 onResume()
에 로직이 있어야 합니다.
상태를 재평가하고 다음에 해당하는 경우 기기 관리자 활성화 옵션을 사용자에게 제시하세요.
확인할 수 있습니다
기기 정책 컨트롤러 구현
기기 관리자가 활성화되면 애플리케이션이 기기를 구성합니다. 요청된 정책이 포함된 정책 관리자 새 정책이 Android 버전 확인을 수행하는 것이 적절할 수 있습니다. 이전 버전의 플랫폼을 지원하는 동시에 새 정책을 도입했습니다. 예를 들어 비밀번호 최솟값은 대문자 정책은 API 수준 11 (Honeycomb) 이상에서만 사용할 수 있습니다. 다음 코드는 런타임 시 버전을 확인하는 방법을 보여줍니다.
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var policyAdmin: ComponentName dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager policyAdmin = ComponentName(context, PolicyAdmin::class.java) dpm.apply { setPasswordQuality(policyAdmin, PASSWORD_QUALITY_VALUES[passwordQuality]) setPasswordMinimumLength(policyAdmin, passwordLength) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { setPasswordMinimumUpperCase(policyAdmin, passwordMinUpperCase) } }
자바
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName policyAdmin = new ComponentName(context, PolicyAdmin.class); dpm.setPasswordQuality(policyAdmin, PASSWORD_QUALITY_VALUES[passwordQuality]); dpm.setPasswordMinimumLength(policyAdmin, passwordLength); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { dpm.setPasswordMinimumUpperCase(policyAdmin, passwordMinUpperCase); }
이 시점에서 애플리케이션이 정책을 시행할 수 있습니다. 애플리케이션에 기기 정책 관리자 API를 통해 사용되는 실제 화면 잠금 비밀번호에 이르기까지 기존 비밀번호가 필수 정책을 충족하는지 여부 기존의 화면 잠금 암호가 충분하지 않은 경우 기기 관리 API가 자동으로 시정 조치를 취합니다. 시스템을 명시적으로 실행하는 것은 애플리케이션의 책임입니다. 설정 앱의 비밀번호 변경 화면 예를 들면 다음과 같습니다.
Kotlin
if (!dpm.isActivePasswordSufficient) { // Triggers password change screen in Settings. Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent -> startActivity(intent) } }
자바
if (!dpm.isActivePasswordSufficient()) { ... // Triggers password change screen in Settings. Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD); startActivity(intent); }
일반적으로 사용자는 사용 가능한 잠금 메커니즘 중 하나를 선택할 수 있습니다(예: 없음, 패턴, 잠금 해제). PIN (숫자) 또는 비밀번호 (영숫자)를 사용할 수 있습니다. 비밀번호 정책이 구성되면 해당 비밀번호는 정책에 정의된 유형보다 약한 유형은 사용 중지됩니다. 예를 들어 '숫자' 비밀번호 품질이 구성되면 사용자가 PIN (숫자) 또는 비밀번호 중 하나를 선택할 수 있습니다. 비밀번호(영숫자)만 사용할 수 있습니다.
적절한 화면 잠금 비밀번호를 설정하여 기기가 제대로 보호되면 애플리케이션은 에서 보안 콘텐츠에 대한 액세스를 허용합니다.
Kotlin
when { !dpm.isAdminActive(policyAdmin) -> { // Activates device administrator. ... } !dpm.isActivePasswordSufficient -> { // Launches password set-up screen in Settings. ... } else -> { // Grants access to secure content. ... startActivity(Intent(context, SecureActivity::class.java)) } }
Java
if (!dpm.isAdminActive(..)) { // Activates device administrator. ... } else if (!dpm.isActivePasswordSufficient()) { // Launches password set-up screen in Settings. ... } else { // Grants access to secure content. ... startActivity(new Intent(context, SecureActivity.class)); }