직장 프로필

Android 플랫폼을 사용하면 직장 프로필 (관리 프로필이라고도 함)에서 설정할 수 있습니다. 직장 프로필이 제어됨 사용할 수 있으며, API에서 사용할 수 있는 기능은 사용자 기본 프로필의 기능을 제한합니다. 이 접근 방식을 통해 조직은 회사별 앱과 데이터가 사용자 기기에서 실행되는 환경 사용자가 개인 앱과 프로필을 사용하도록 허용합니다.

이 과정에서는 애플리케이션이 작동하도록 수정하는 방법을 보여줍니다. 직장 프로필이 있는 기기에서 안정적으로 실행될 수 있습니다 별도의 조치가 필요하지 않습니다. 일반적인 앱 개발 권장사항 외에도 그러나 이 중 일부는 관행이 직장 프로필이 있는 기기에서 특히 중요합니다. 이 알아야 할 문제가 강조 표시됩니다.

개요

사용자는 기업 환경에서 개인 기기를 사용하고 싶어 하는 경우가 많습니다. 이 조직은 딜레마에 빠질 수 있습니다. 사용자가 자체 조직에서는 기밀 정보 (직원 및 직원과 같은)가 이메일, 연락처)가 조직에서 제어하지 않는 기기에 있는 경우

이 상황을 해결하기 위해 조직은 Android 5.0 (API 레벨 21)을 통해 직장 프로필을 설정합니다. 기기에 직장 프로필이 있는 경우 프로필의 IT 관리자가 제어합니다. 이 IT 관리자는 해당 프로필에 허용되는 앱을 선택할 수 있습니다. 프로필에서 사용할 수 있는 기기 기능만 제어합니다.

기기에 직장 프로필이 있으면 앱에 영향을 미칩니다. 앱이 어떤 프로필에서 실행되든 상관없이

  • 기본적으로 대부분의 인텐트는 한 프로필에서 다른 프로필로 넘어가지 않습니다. 만약 프로필에서 실행 중인 앱이 인텐트를 실행하지만 인텐트가 다른 프로필로 교차할 수 없는 경우 프로필 제한으로 인해 요청이 실패하고 앱이 종료될 수 있습니다. 발생합니다.
  • 프로필 IT 관리자는 앱에서 사용할 수 있는 시스템 앱을 제한할 수 있습니다. 직장 프로필 이 제한으로 인해 몇 가지 일반적인 인텐트를 살펴보겠습니다.
  • 개인 프로필과 직장 프로필은 별도의 저장공간이 있으므로 한 프로필에서 유효한 파일 URI가 다른 프로필에서는 유효하지 않습니다. 모든 문자 한 프로필에서 실행된 인텐트가 다른 프로필에서 처리될 수 있음 (프로필에 따라 다름) 설정)할 수 있으므로 파일 URI를 인텐트에 연결하는 것은 안전하지 않습니다.

실패한 인텐트 방지

직장 프로필이 있는 기기에서는 인텐트에 대한 제한 사항이 있습니다. 다른 프로필로 이동할 수 있습니다. 대부분의 경우 인텐트가 실행될 때 끄면 실행된 동일한 프로필에서 처리됩니다. 핸들러가 없는 경우 해당 프로필에 있는 인텐트의 경우 인텐트는 처리되지 않으며 앱이 핸들러가 있더라도 예기치 않게 종료될 수 있습니다. 인텐트를 허용합니다.

프로필 관리자는 한 프로필에서 다른 프로필로 이동할 수 있습니다. IT 관리자가 이 결정을 하게 되면 이 경계를 넘을 수 있는 인텐트를 사전에 알 수 있습니다. 이 이 정책은 IT 관리자가 설정하며 언제든지 자유롭게 변경할 수 있습니다.

앱에서 활동을 시작하기 전에 적절한 해결 방법을 찾을 수 있습니다. 나 Intent.resolveActivity()를 호출하여 허용 가능한 해결 방법이 있는지 확인할 수 있습니다. 만약 방법을 사용하면 메서드가 null 메서드가 null이 아닌 값을 반환하면 종료되며 인텐트를 실행하는 것이 안전합니다. 이 경우 인텐트를 확인하거나 현재 프로필에 핸들러가 있거나 인텐트가 다른 프로필의 핸들러로 교차할 수 있습니다. (자세한 내용은 인텐트 확인에 관해서는 일반 인텐트를 참고하세요.)

예를 들어 앱에서 타이머를 설정해야 하는 경우 ACTION_SET_TIMER 인텐트의 유효한 핸들러가 있습니다. 앱에서 문제를 해결할 수 없는 경우 적절한 작업을 수행해야 합니다 (예: 오류 표시 메시지).

Kotlin

fun startTimer(message: String, seconds: Int) {

    // Build the "set timer" intent
    val timerIntent = Intent(AlarmClock.ACTION_SET_TIMER).apply {
        putExtra(AlarmClock.EXTRA_MESSAGE, message)
        putExtra(AlarmClock.EXTRA_LENGTH, seconds)
        putExtra(AlarmClock.EXTRA_SKIP_UI, true)
    }

    // Check if there's a handler for the intent
    if (timerIntent.resolveActivity(packageManager) == null) {

        // Can't resolve the intent! Fail this operation cleanly
        // (perhaps by showing an error message)

    } else {
        // Intent resolves, it's safe to fire it off
        startActivity(timerIntent)

    }
}

자바

public void startTimer(String message, int seconds) {

    // Build the "set timer" intent
    Intent timerIntent = new Intent(AlarmClock.ACTION_SET_TIMER)
            .putExtra(AlarmClock.EXTRA_MESSAGE, message)
            .putExtra(AlarmClock.EXTRA_LENGTH, seconds)
            .putExtra(AlarmClock.EXTRA_SKIP_UI, true);

    // Check if there's a handler for the intent
    if (timerIntent.resolveActivity(getPackageManager()) == null) {

        // Can't resolve the intent! Fail this operation cleanly
        // (perhaps by showing an error message)

    } else {
        // Intent resolves, it's safe to fire it off
        startActivity(timerIntent);

    }
}

프로필 간 파일 공유

앱이 다른 앱에 자체 파일에 대한 액세스 권한을 부여해야 하는 경우가 있습니다. 예를 들어 이미지 갤러리 앱은 이미지와 함께 이미지를 공유하려고 할 수 있습니다. 편집자 일반적으로 파일을 공유하는 방법은 두 가지가 있습니다. 파일 사용 URI 또는 콘텐츠 URI입니다.

파일 URI는 file: 프리픽스로 시작하고 그 뒤에 기기 저장소에 있는 파일의 절대 경로입니다. 하지만 직장 프로필과 개인 프로필은 별도의 저장소 영역인 다른 프로필에서는 유효하지 않습니다. 이러한 상황 즉, 사용자가 파일 URI를 인텐트에 첨부하고 인텐트가 다른 프로필에서 처리됨 핸들러가 파일에 액세스할 수 없는 경우

대신 콘텐츠 URI를 사용하여 파일을 공유해야 합니다. 콘텐츠 URI 보다 안전하고 공유 가능한 방식으로 파일을 식별할 수 있습니다. 콘텐츠 URI에는 파일 경로뿐 아니라 파일을 제공하는 권한과 ID 번호 확인할 수 있습니다. 다음을 사용하여 모든 파일의 콘텐츠 ID를 생성할 수 있습니다. FileProvider 그런 다음 이 콘텐츠를 다른 앱과 ID를 공유합니다 (다른 프로필에서도 가능). 수신자는 콘텐츠 ID를 사용하여 실제 파일에 액세스할 수 있습니다.

예를 들어, 다음은 특정 파일의 콘텐츠 URI를 가져오는 방법입니다. URI:

Kotlin

// Open File object from its file URI
val fileToShare = File(fileUriToShare)

val contentUriToShare: Uri = FileProvider.getUriForFile(
        context,
        "com.example.myapp.fileprovider",
        fileToShare
)

자바

// Open File object from its file URI
File fileToShare = new File(fileUriToShare);

Uri contentUriToShare = FileProvider.getUriForFile(getContext(),
        "com.example.myapp.fileprovider", fileToShare);

getUriForFile() 메서드를 호출하면 파일 제공업체의 권한을 포함해야 합니다 (이 예에서는 "com.example.myapp.fileprovider")를 사용하며, 이는 <provider> 요소를 지정할 수 있습니다. 콘텐츠 URI와 파일을 공유하는 방법에 관한 자세한 내용은 공유 Files로 이동하세요.

알림 수신 대기

앱은 일반적으로 NotificationListenerService 서브클래스를 알림 변경에 관한 콜백을 시스템에서 수신합니다. 지원 기기 직장 프로필이 NotificationListenerService 작동 방식에 영향을 줄 수 있음 하세요.

직장 프로필

앱에서 NotificationListenerService을(를) 사용할 수 없습니다. 애플리케이션을 실행할 수 있습니다 앱이 직장 프로필에서 실행될 때 시스템이 앱의 NotificationListenerService를 무시합니다. 하지만 개인 프로필에서 실행되는 앱은 알림을 수신할 수 있습니다.

개인 프로필

앱이 개인 프로필로 실행되는 경우 알림을 받지 못할 수 있습니다. 직장 프로필에서 실행되는 앱의 경우 기본적으로 모든 개인 프로필 앱은 콜백을 수신하지만 IT 관리자가 하나 이상의 개인 프로필을 허용 목록에 추가할 수 있음 알림 변경사항을 수신 대기하도록 허용한 앱 그러면 시스템이 허용되지 않습니다. Android 8.0 (API 수준 26) 이상에서 기기 정책 직장 프로필을 관리하는 컨트롤러 (DPC)가 앱의 수신 대기를 차단할 수 있음 DevicePolicyManager를 사용하여 직장 프로필의 알림에 추가 결제 수단 setPermittedCrossProfileNotificationListeners()입니다. 앱은 개인 확인할 수 있습니다.

앱이 직장 프로필과의 호환성 테스트

직장 프로필 환경에서 앱을 테스트하여 앱이 실패하게 만드는 문제를 포착합니다. 직장 프로필을 만들 수 있습니다. 특히 직장 프로필 기기에서 테스트하는 것이 좋습니다. 확인하는 방법이 있습니다. 처리할 수 없고 프로필 간에 작동하지 않는 URI를 연결하지 않으므로 을 탭합니다.

Google에서 제공하는 샘플 앱인 TestDPC는 Android 기기에 직장 프로필을 설정하는 데 사용할 수 있는 Android 5.0 (API 수준 21) 이상 이 앱을 사용하면 직장 프로필 환경에서 앱을 개발할 수 있습니다. 이 앱을 사용하여 다음 작업을 할 수도 있습니다. 직장 프로필을 다음과 같이 구성합니다.

  • 관리 기기에서 사용할 수 있는 기본 앱을 지정합니다. 프로필
  • 프로필 간에 교차할 수 있는 인텐트 구성 다른

USB 케이블을 통해 앱이 개인용 기기와 업무용 기기에 모두 설치되어 있는 경우 확인할 수 있습니다. 앱을 설치한 후 다음 조건을 충족해야 합니다.

  • 인텐트가 일반적으로 기본 앱 (예: 직장 프로필에서 기본 앱을 사용 중지해 봅니다. 앱이 이를 적절하게 처리하는지 확인합니다.
  • 다른 앱에서 처리할 것으로 예상하는 인텐트를 실행하는 경우 해당 인텐트의 권한을 활성화 및 비활성화하여 한 프로필에서 있습니다. 두 경우 모두 앱이 제대로 작동하는지 확인합니다. 만약 프로필 간에 교차할 수 없으므로 앱 동작을 확인하고 앱 프로필에 적절한 핸들러가 있고 핸들러가 없는 경우 예를 들어 앱이 지도 관련 인텐트를 실행하는 경우 다음을 각각 시도해 보세요. 시나리오: <ph type="x-smartling-placeholder">
      </ph>
    • 기기에서 매핑 인텐트가 한 프로필에서 다른 프로필로 교차하도록 허용합니다. 다른 프로필에 적절한 핸들러가 있는지 (앱이 실행 중)
    • 기기는 프로필 간에 맵 인텐트가 교차하도록 허용하지 않지만 앱 프로필의 적절한 핸들러입니다.
    • 기기는 프로필 간에 맵 인텐트가 교차하도록 허용하지 않습니다. 기기 프로필의 지도 인텐트에 적합한 핸들러가 아닙니다.
  • 인텐트에 콘텐츠를 첨부하는 경우 인텐트가 올바르게 작동하는지 확인 앱 프로필에서 처리될 때 그리고 프로필을 만들 수 있습니다.

직장 프로필에서 테스트: 도움말 및 유용한 정보

애드센스 계정에서 테스트하는 데 도움이 되는 직장 프로필 기기입니다.

  • 앞서 언급했듯이 직장 프로필 기기에서 앱을 사이드로드하면 두 개의 프로필에 모두 설치되어 있어야 합니다 원하는 경우 하나의 프로필에서 앱을 삭제할 수 있습니다. 다른 쪽 위에 두는 것입니다.
  • Android 디버그 브리지 (adb) 셸에서 사용할 수 있는 대부분의 활동 관리자 명령어 실행할 사용자를 지정할 수 있는 --user 플래그 지원 있습니다. 사용자를 지정하면 비관리 기본 사용자로 실행할지 여부를 선택할 수 있습니다. 또는 직장 프로필을 사용할 수 있습니다. 자세한 내용은 ADB를 참고하세요. 셸 명령어를 참조하세요.
  • 기기에서 활성 사용자를 찾으려면 adb 패키지 관리자의 list users 명령어. 출력 문자열의 첫 번째 숫자는 --user 플래그와 함께 사용할 수 있는 사용자 ID입니다. 자세한 내용은 자세한 내용은 ADB 셸 명령어를 참조하세요.

예를 들어 기기에서 사용자를 찾으려면 다음 명령어를 실행합니다.

$ adb shell pm list users
UserInfo{0:Drew:13} running
UserInfo{10:Work profile:30} running

이 경우 기본 사용자('Drew')의 사용자 ID는 0이고 사용자 ID가 10입니다. 직장 프로필에서 앱을 실행하려면 다음과 같은 명령어를 사용합니다.

$ adb shell am start --user 10 \
-n "com.example.myapp/com.example.myapp.testactivity" \
-a android.intent.action.MAIN -c android.intent.category.LAUNCHER