İş profilleri

Android platformu sayesinde cihazlar iş profiller (bazen yönetilen profiller olarak da adlandırılır). İş profili kontrol ediliyor tarafından sağlanabilir ve kullanılabilir işlevler kullanıcının birincil profilinin işlevleri. Bu yaklaşım sayesinde kuruluşlar Kullanıcının cihazında şirkete özel uygulama ve verilerin çalıştığı ortam, kullanıcı kişisel uygulamalarını ve profillerini kullanmaya devam edebilir.

Bu derste, uygulamanızı çalışması için nasıl değiştireceğiniz gösterilmektedir güvenilir bir şekilde çalışmasını sağlayabilir. Herhangi bir işlem yapmanız gerekmez bir uygulama geliştirdi. Ancak bu en iyi uygulamalardan bazıları uygulamalar özellikle iş profili olan cihazlarda önemli hale gelir. Bu bu belgede, bilmeniz gereken sorunlar vurgulanıyor.

Genel Bakış

Kullanıcılar genellikle kişisel cihazlarını kurumsal bir ortamda kullanmak ister. Bu kurumların bir ikilemde kalmasına yol açabilir. Kullanıcı kendi (çalışan veya çalışan) gizli bilgilerin (ör. çalışanlar) e-postalar ve kişiler) kuruluşun kontrolünde olmayan bir cihazda bulunuyorsa.

Android 5.0 (API düzeyi 21), kuruluşların bu sorunu çözmek için iş profilleri oluşturabilirsiniz. Bir cihazda iş profili varsa, profilin ayarları BT yöneticisinin denetimindedir. İlgili içeriği oluşturmak için kullanılan BT yöneticisi söz konusu profil için hangi uygulamalara izin verileceğini seçebilir ve profilde hangi cihaz özelliklerinin kullanılabileceğini kontrol edebilir.

Bir cihazda iş profili varsa uygulamalar bundan etkilenebilir cihaz hangi profilde çalışırsa çalışsın:

  • Varsayılan olarak çoğu amaç bir profilden diğerine geçmez. Bir profilde çalışan uygulama bir intent tetiklerse, ve amacın başka profile geçişine izin verilmez Profil kısıtlamaları nedeniyle istek başarısız olur ve uygulama kapatılabilir beklenmedik bir şekilde.
  • Profil BT yöneticisi, iş profiline gidin. Bu kısıtlama, aynı zamanda iş profilinde bazı ortak amaçlar.
  • Kişisel profiller ve iş profilleri için ayrı depolama alanları olduğundan, Bir profilde geçerli olan dosya URI'si diğer profilde de geçerli değil. Herhangi biri bir profilde tetiklenen amaç diğerinde işlenebilir (profile bağlı olarak) ayarları), bu nedenle amaçlara dosya URI'leri eklemek güvenli değildir.

Başarısız niyetleri önleme

İş profili olan bir cihazda, bir profilden diğerine geçebilir. Çoğu durumda bir amaç tetiklendiğinde tetiklendiği profilde işlenir. İşleyici yoksa bu profildeki amaç için istek işlenmez ve uygulama etkinleşen bir şey olması durumunda, cihazın bir işleyicisi bulunsa bile bunu yapabilirsiniz.

Profil yöneticisi, hangi amaçların kullanılacağını seçebilir bir profilden diğerine geçebilir. BT yöneticisi bu kararı hiçbir şekilde hangi amaçların bu sınırı aşmasına izin verildiğini önceden bilmek gerekir. İlgili içeriği oluşturmak için kullanılan Bu politikayı BT yöneticisi belirler ve istediği zaman değiştirebilir.

Uygulamanız bir etkinlik başlatmadan önce var olan bir uygun bir çözüm olabilir. Siz Intent.resolveActivity() numaralı telefonu arayarak kabul edilebilir bir çözüm olduğunu doğrulayabilir. Herhangi bir yöntemini kullanmakla birlikte, yöntem, null Yöntem null olmayan bir değer döndürürse Niyetten kurtulmak güvenlidir. Bu durumda, çözülebilir veya çünkü geçerli profilde bir işleyici bulunduğundan veya diğer profilde bir işleyiciye geçiş yapmasına izin verildiği anlamına gelir. (Daha fazla bilgi için amaçları çözümleme için Yaygın Amaçlar başlıklı makaleyi inceleyin.)

Örneğin, uygulamanızın zamanlayıcılar ayarlaması gerekiyorsa ACTION_SET_TIMER amacı için geçerli bir işleyici var. Uygulama çözülemezse uygun bir işlem (bir hata mesajı göstermek gibi) mesajı).

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)

    }
}

Java

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);

    }
}

Profiller arasında dosya paylaşma

Bazen bir uygulamanın, diğer uygulamalara kendi dosyalarına erişmesini sağlaması gerekir. Örneğin, bir resim galerisi uygulaması, oluşturduğunuz resimleri editörler. Normalde bir dosyayı iki şekilde paylaşabilirsiniz: dosya ile URI veya içerik URI'si.

Dosya URI'si, file: önekiyle başlar ve ardından dosyanın cihazın depolama alanındaki mutlak yolu. Ancak, iş profili ve kişisel profil ayrı depolama alanları, bir dosya URI'si bir profilde geçerli olan bir şey diğer profilde de geçerli değil. Bu durum Yani şu anlama gelir: bir amaca dosya URI'si eklediğinizde, amaç diğer profilde işlenir işleyici dosyaya erişemiyor.

Bunun yerine, dosyaları içerik URI'leri ile paylaşmanız gerekir. İçerik URI'leri daha güvenli ve paylaşılabilir bir şekilde tanımlamanızı sağlar. İçerik URI'si şunu içerir: dosya yolunu, ayrıca dosyayı sağlayan yetkiliyi ve bir kimlik numarası dosyayı tanımlayarak. FileProvider Ardından bu içeriği, Diğer uygulamalarla olan kimliği (başka profilde bile). Alıcı, Content ID'yi kullanın.

Örneğin, belirli bir dosyanın içerik URI'sini şu şekilde alabilirsiniz: URI:

Kotlin

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

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

Java

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

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

getUriForFile() yöntemini çağırdığınızda dosya sağlayıcının yetkilisini eklemeniz gerekir (bu örnekte "com.example.myapp.fileprovider"), <provider> öğesi oluşturun. İçerik URI'leri ile dosya paylaşma hakkında daha fazla bilgi için bkz. Paylaşılıyor Dosyalar.

Bildirimleri dinleyin

Bir uygulama genellikle NotificationListenerService alt sınıfa bildirimlerdeki değişikliklerle ilgili olarak sistemden geri arama alabilirsiniz. Şu özelliğe sahip cihazlar: iş profilleri, NotificationListenerService uygulamasının çalışma şeklini etkileyebilir nasıl sağlayabileceğini de öğreneceksiniz.

İş profilinde

Bir uygulamadan NotificationListenerService kullanamazsınız iş profilinde çalışıyor. Uygulamanız bir iş profilinde çalışırken sistem, uygulamanızın NotificationListenerService parametresini yoksayar. Ancak, kişisel profilde çalışan uygulamalar bildirimleri dinleyebilir.

Kişisel bir profilde

Uygulamanız kişisel profilde çalıştığında bildirim almayabilirsiniz iş profilinde çalışan uygulamalar için geçerlidir. Varsayılan olarak tüm kişisel profil uygulamaları geri arama alabiliyorum ancak BT yöneticisi bir veya daha fazla kişisel profili izin verilenler listesine ekleyebiliyor izin verdikleri uygulamalardır. Sistem daha sonra izin verilenler listesinde olmayan uygulamalar. Android 8.0 (API düzeyi 26) veya sonraki sürümlerde bir cihaz politikası İş profilini yöneten denetleyici (DPC) uygulamanızın dinlemesini engelleyebilir iş profili bildirimlerine DevicePolicyManager aracılığıyla yöntem setPermittedCrossProfileNotificationListeners(). Uygulamanız, kişisel seçin.

Uygulamanızı İş Profilleriyle Uyumluluk açısından test etme

Uygulamanızı bir iş profili ortamında test ederek uygulamanızın, şu özelliklere sahip cihazlarda başarısız olmasına neden olabilecek sorunları iş profilleri. Özellikle bir iş profili cihazında test yapmak, uygulamanızın amaçları doğru şekilde işlemesini sağlamanın bir yolu: işlenemez, profiller arası çalışmayan URI'lar eklemez ve beklemeye gerek yoktur.

Sunduğumuz örnek uygulama olan TestDPC Android cihazınızda iş profili oluşturmak için Android 5.0 (API düzeyi 21) ve sonraki sürümler. Bu uygulama, uygulamanızın hızlı bir şekilde iş profili ortamında kullanabilirsiniz. Bu uygulamayı kullanarak ayrıca şunları da yapabilirsiniz: iş profilini aşağıdaki gibi yapılandırın:

  • Yönetilen cihazlarda hangi varsayılan uygulamaların kullanılabileceğini belirleyin profil
  • Bir profilden profilden geçişe izin verilen intent'leri yapılandırın diğer

USB kablosuyla bir uygulamayı Uygulama hem kişisel hem de iş profiline seçin. Uygulamayı yükledikten sonra şu koşulları kabul etmelisiniz:

  • Bir intent, normalde varsayılan uygulama tarafından işlenecekse (örneğin, iş profilinde varsayılan uygulamayı devre dışı bırakmayı deneyin ve uygulamanın bunu uygun şekilde işlediğini doğrulayın.
  • Başka bir uygulama tarafından işlenmesini beklediğiniz bir niyeti tetiklerseniz tek bir profilden farklı bir profilden farklı bir profile geçiş yapan başka bir tane. Uygulamanın her iki durumda da düzgün çalıştığını doğrulayın. Öğe intent'in profiller arasında geçiş yapmasına izin verilmediğinden, hem uygulamanın davranışını hem de uygulamanın profilinde uygun bir işleyici olduğunda ve olmadığında. Örneğin, uygulamanız haritayla ilgili bir niyeti tetiklerse aşağıdakilerin her birini deneyin: senaryolar:
    • Cihaz, harita amaçlarının bir profilden diğerine geçiş yapmasına izin verir ve diğer profilde uygun bir işleyici varsa (uygulamanın çalışıyor)
    • Cihaz, harita amaçlarının profiller arasında geçiş yapmasına izin vermiyor, ancak uygulamanın profilinde uygun bir işleyici
    • Cihaz, harita amaçlarının profiller arasında geçişine izin vermediğinde ve cihazın profilinde harita amaçları için uygun bir işleyici değil
  • Bir amaca içerik eklerseniz niyetin düzgün şekilde davrandığını doğrulayın hem uygulamanın profilinde işlendiğinde hem de profil.

İş profillerini test etme: ipuçları ve püf noktaları

Test sırasında işinize yarayabilecek birkaç püf noktası iş profili cihazı.

  • Daha önce belirtildiği gibi, bir uygulamayı iş profili cihazına başka cihazdan yüklediğinizde, yüklü olduğundan emin olun. İsterseniz uygulamayı bir profilden silebilirsiniz diğerinde bırakacağım.
  • Android Debug Bridge (adb) kabuğunda kullanılabilen etkinlik yöneticisi komutlarının çoğu --user işaretini destekler. Bu işaret, hangi kullanıcının çalıştırılacağını belirtmenize olanak tanır. olarak Bir kullanıcı belirterek, yönetilmeyen birincil kullanıcı olarak çalıştırılıp çalıştırılmayacağını seçebilirsiniz. veya iş profilinizle güncelleyin. Daha fazla bilgi için bkz. ADB Kabuk Komutları.
  • Bir cihazdaki etkin kullanıcıları bulmak için adb paket yöneticisinin list users komutudur. Çıkış dizesindeki ilk sayı --user işaretiyle birlikte kullanabileceğiniz kullanıcı kimliği kimliğidir. Daha fazla daha fazla bilgi için ADB Kabuğunu inceleyin Komutlar.

Örneğin, bir cihazdaki kullanıcıları bulmak için şu komutu çalıştırırsınız:

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

Bu örnekte, birincil kullanıcı("Drew") 0 kullanıcı kimliğine ve iş profilinin kullanıcı kimliği 10'dur. İş profilinde bir uygulamayı çalıştırmak için: şöyle bir komut kullanabilir:

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