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