Bu geliştirici kılavuzunda, cihaz politikası denetleyicinizin (DPC) Android sistem güncellemelerini cihaz kullanıcısı adına yönetebilir.
Giriş
Android cihazlar sisteme kablosuz (OTA) güncellemeler alıp yükleyebilir ve uygulama yazılımıdır. Android, cihaz kullanıcısına sistem güncellemesi yapıldığını bildirir kullanılabilir ve cihaz kullanıcısı güncellemeyi hemen veya daha sonra yükleyebilir.
BT yöneticisi, DPC'nizi kullanarak cihaz kullanıcısının sistem güncellemelerini yönetebilir. DPC'ler tümüyle yönetilen bir cihaza (cihaz sahibi olarak adlandırılır) veya bir iş profiline sahip olabilirler (profil sahibi olarak adlandırılır). Tablo 1'de, cihaz sahiplerinin sistemi nasıl yönetebileceği gösterilmektedir güncellemelerine ilişkin bir bildirim alırsınız. Ancak profil sahipleri yalnızca sistem güncellemeleriyle ilgili bilgileri bildirebilir.
Tablo 1: DPC'lerin kullanabileceği görevler, sahip moduna bağlıdır
Bekleyen güncellemeleri kontrol etme
Bekleyen güncelleme, henüz yüklenmemiş bir cihaza yönelik sistem güncellemesidir. DPC'niz, BT yöneticilerinin bekleyen sistem güncellemelerinin olup olmadığını kontrol etmesine yardımcı olabilir. cihaz kullanıcılarından kritik güncellemeleri derhal yüklemelerini isteyebiliriz.
Android 8.0 (API düzeyi 26) veya sonraki sürümleri çalıştıran cihaz sahipleri ve profil sahipleri
cihazın beklemede olan bir sistem güncellemesi olup olmadığını kontrol edebilir. Telefonla arama
DevicePolicyManager.getPendingSystemUpdate()
(cihaz güncelse null
değerini döndürür.) Bekleyen bir sistem güncellemesi varsa
yöntem, güncellemeyle ilgili bilgileri döndürür.
Bekleyen güncelleme hakkında daha fazla bilgi
getPendingSystemUpdate()
numaralı telefonu aradıktan sonra, iade edilen öğeleri inceleyebilirsiniz
Beklemedeki güncelleme hakkında daha fazla bilgi edinmek için SystemUpdateInfo
değeri. İlgili içeriği oluşturmak için kullanılan
aşağıdaki örnekte, bekleyen bir güncellemenin ilk ne zaman olduğunu nasıl öğrenebileceğiniz gösterilmektedir
cihaz tarafından kullanılabilir:
Kotlin
val firstAvailable = dpm.getPendingSystemUpdate(adminName)?.receivedTime firstAvailable?.let { Log.i(TAG, "Update first available: ${Date(firstAvailable)}") }
Java
SystemUpdateInfo updateInfo = dpm.getPendingSystemUpdate(adminName); if (updateInfo != null) { Long firstAvailable = updateInfo.getReceivedTime(); Log.i(TAG, "Update first available: " + new Date(firstAvailable)); }
Sistem geri çağırma işlevleri
Bir güncelleme kullanıma sunulduğunda Android sistemi, cihaz sahiplerini yeni güncellemeyi gözden geçirin. Android 8.0 veya sonraki sürümlerde sistem, profil sahiplerini de bilgilendirir.
DeviceAdminReceiver
alt sınıfınızda
onSystemUpdatePending()
geri arama. Herhangi bir teknik
numaralı telefonu arayın. Sistem bu durumu
tek bir güncelleme için bu yöntemi birden fazla kez çağırın. Bu nedenle, güncellemenin durumunu kontrol edin
inceleyin. getPendingSystemUpdate()
numaralı telefonu arayarak
olduğunu varsayalım. Aşağıdaki örnekte bunu nasıl yapabileceğiniz gösterilmektedir:
Kotlin
/** * Called when a new update is available. */ override fun onSystemUpdatePending(context: Context?, intent: Intent?, receivedTime: Long) { // System update information is supported in API level 26 or higher. if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { return } val updateInfo = getManager(context) .getPendingSystemUpdate(getWho(context)) ?: return if (updateInfo.securityPatchState == SystemUpdateInfo.SECURITY_PATCH_STATE_TRUE) { // Perhaps install because this is a security patch. // ... } }
Java
/** * Called when a new update is available. */ public void onSystemUpdatePending (Context context, Intent intent, long receivedTime) { // System update information is supported in API level 26 or higher. if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { return; } SystemUpdateInfo updateInfo = getManager(context) .getPendingSystemUpdate(getWho(context)); if (updateInfo == null) { return; } if (updateInfo.getSecurityPatchState() == SystemUpdateInfo.SECURITY_PATCH_STATE_TRUE) { // Perhaps install because this is a security patch. // ... } }
Bir sistemde birden fazla DPC varsa (örneğin, tümüyle yönetilen iş profilleri) cihaz sahibi ve profil sahibi geri arama alır.
Politikaları güncelleme
Cihaz sahibi, yerel bir sistem ayarlayarak güncellemelerin ne zaman yükleneceğini kontrol edebilir güncelleme politikası. Sistem güncelleme politikası üç türden biri olabilir:
- Otomatik
- Sistem güncellemelerini alındıkları anda yükler kullanılabilir (kullanıcı etkileşimi olmadan). Bu politika türünün ayarlanması, bekleyen tüm güncellemeleri hemen yükler ertelenebilir veya bakım dönemini bekleyebilir.
- Aralıklı
- Sistem güncellemelerini günlük bakım sırasında yükler (kullanıcı etkileşimi olmadan). Günlük bakım döneminin başlangıcını ve bitişini yeni pencereli bir politika oluştururken de kullanılır.
- Ertelendi
- Sistem güncellemelerinin yüklenmesini 30 gün erteler. 30 günden sonra süresi sona erdiğinde sistem, cihaz kullanıcısının güncellemeyi yüklemesini ister.
Erteleme dönemleri
Sistem, her güncellemeyi bir 30 günlük ertelemeyle sınırlandırır. Söz konusu dönem, sistem öncelikle güncellemeyi erteler ve yeni erteleme politikaları süreyi uzatabilirsiniz.
Android, ertelemenin yanı sıra diğer bağlantı olmaması, yetersiz disk alanı veya düşük pil gibi nedenler olabilir.
Farklı bir güncelleme olursa sistem, 30 günlük erteleme zamanlayıcısını sıfırlar. kontrol edilebilir ve BT yöneticilerine birleşik sistemi deneme olanağı verir. güncellemelerine göz atın. Yeni bir güncelleme yapılmazsa 30 gün geçtikten sonra, sistem bekleyen tüm güncellemeleri yüklemek için kullanılır. Daha sonra, yeni bir sistem güncellemesi 30 günlük süre tekrar başlar.
Politika ayarlama
Güncelleme politikalarını Android 8.0 (API düzeyi 26) veya sonraki sürümlerde ayarlayabilirsiniz. Belirtmek için:
cihazın sistem güncellemelerini yüklemesi gerektiğinde,
Belirtilen üç türden birini kullanarak SystemUpdatePolicy
bölümünü ziyaret edin. Politika belirlemek için cihaz sahibiniz DevicePolicyManager
yöntemini kullanır
setSystemUpdatePolicy()
Aşağıdaki kod
örneği bunu nasıl yapabileceğinizi gösterir. Pencereli politika örneği görmek için
SystemUpdatePolicy
belgelerini inceleyin.
Kotlin
// Create the system update policy to postpone installation for 30 days. val policy = SystemUpdatePolicy.createPostponeInstallPolicy() // Get a DevicePolicyManager instance to set the policy on the device. val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager val adminName = getComponentName(context) // Set the policy. dpm.setSystemUpdatePolicy(adminName, policy)
Java
// Create the system update policy to postpone installation for 30 days. SystemUpdatePolicy policy = SystemUpdatePolicy.createPostponeInstallPolicy(); // Get a DevicePolicyManager instance to set the policy on the device. DevicePolicyManager dpm = (DevicePolicyManager) context .getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName adminName = getComponentName(context); // Set the policy. dpm.setSystemUpdatePolicy(adminName, policy);
Politika örneklerini oluşturduktan sonra değiştiremezsiniz. Cihazın ne zaman
yeni bir politika oluşturup ayarlayabilirsiniz. Bir politikayı bir
cihazında policy
bağımsız değişkeni olarak null
ileten setSystemUpdatePolicy()
çağrısı.
DPC'niz bir politikayı kaldırdıktan sonra, cihaz kullanıcısı
mevcut sistem güncellemelerinden yararlanabilirsiniz.
Uygulamalar almak için getSystemUpdatePolicy()
numaralı telefonu arayabilir
cihazın geçerli politikasına. Bu yöntem null
değerini döndürürse bu,
politika henüz belirlenmemiş olmalıdır.
Dönemleri dondurma
Tatil veya diğer yoğunluk gibi kritik dönemlerde işletim sistemi sürümünü dondurmak cihaz sahipleri, sistem güncellemelerini 90 güne kadar askıya alabilir. Bir Cihaz donma süresi içindeyse aşağıdaki şekilde davranır:
- Cihaz, bekleyen sistem güncellemeleri hakkında herhangi bir bildirim almaz.
- İşletim sisteminin sistem güncellemeleri yüklü değil.
- Cihaz kullanıcıları, Ayarlar'da sistem güncellemelerini manuel olarak kontrol edemez.
Sistem, tanımlanmış herhangi bir dondurmanın ardından 60 günlük zorunlu bir tampon süresi uygular cihazın süresiz olarak donmasını önler. Unutmayın, sistem donuyor güncellemeler, cihazların kritik güncellemeleri almasını engelleyebilir.
Bir güncelleme politikasında dondurma dönemleri ayarlarsınız. Şu olmadan dondurma dönemleri ayarlayamazsınız: politika ayarlama. Cihaz, ayarladığınız dondurma dönemlerinin dışında olduğunda normal politika davranışı (otomatik, aralıklı veya ertelenmiş) geçerlidir.
Dondurma süresi nasıl ayarlanır?
Android 9 (API düzeyi 28) veya sonraki sürümlerde dondurma dönemleri ayarlayabilirsiniz. Cihaz sahip bir sistem güncelleme politikasında dondurma süresi belirleyerek politikayı ayarlamadan önce cihaz için. Adımlar şu şekildedir:
- Yeni bir sistem güncelleme politikası oluşturun (veya mevcut politikayı alın).
- Politikadaki dondurma sürelerini ayarlamak için şu çağrıyı kullanın:
setFreezePeriods()
. - Şu numarayı arayarak cihaz için politikayı ve dondurma dönemlerini ayarlayın:
setSystemUpdatePolicy()
.
Dondurulma dönemi her yıl tekrarlandığından, dönemi ay ve gün değerleriyle temsil edilir. Başlangıç günü şu saatte başlamalıdır: dondurma döneminin bitiminden en az 60 gün sonra. Aşağıdaki örnek mevcut bir sistem güncelleme politikası için iki dondurma dönemini nasıl ayarlayabileceğinizi gösterir:
Kotlin
// Get the existing policy from the DevicePolicyController instance. val policy = dpm.systemUpdatePolicy ?: return try { // Set the two annual freeze periods on the policy for our retail // point-of-sale devices. val summerSale = FreezePeriod( MonthDay.of(6, 1), MonthDay.of(7, 31)) // Jun 1 - Jul 31 inclusive val winterSale = FreezePeriod( MonthDay.of(11, 20), MonthDay.of(1, 12)) // Nov 20 - Jan 12 inclusive policy.freezePeriods = Arrays.asList(summerSale, winterSale) // Set the policy again to activate the freeze periods. dpm.setSystemUpdatePolicy(adminName, policy) } catch (e: SystemUpdatePolicy.ValidationFailedException) { // There must be previous periods recorded on the device because // summerSale and winterSale don’t overlap and are separated by more // than 60 days. Report the overlap ... }
Java
// Get the existing policy from the DevicePolicyController instance. SystemUpdatePolicy policy = dpm.getSystemUpdatePolicy(); try { // Set the two annual freeze periods on the policy for our // retail point-of-sale devices. FreezePeriod summerSale = new FreezePeriod( MonthDay.of(6, 1), MonthDay.of(7, 31)); // Jun 1 - Jul 31 inclusive FreezePeriod winterSale = new FreezePeriod( MonthDay.of(11, 20), MonthDay.of(1, 12)); // Nov 20 - Jan 12 inclusive policy.setFreezePeriods(Arrays.asList(summerSale, winterSale)); // Don’t forget to set the policy again to activate the freeze periods. dpm.setSystemUpdatePolicy(adminName, policy); } catch (SystemUpdatePolicy.ValidationFailedException e) { // There must be previous periods recorded on the device because summerSale // and winterSale don’t overlap and are separated by more than 60 days. // Report the overlap ... }
Hem başlangıç günü hem de bitiş günü dahildir. Başlangıç günü daha büyükse
gün içinde (örneğin, önceki örnekte winterSale
) olduğu gibi,
sonraki yıla uzanır.
Dondur ayarını yaparken Android'in aşağıdaki gereksinimleri test etmesi gerekir:
- Dondurulma süresi 90 günden uzun olmamalıdır.
- Dondurulma dönemleri arasındaki aralık en az 60 gündür.
- Dondurma dönemleri çakışmaz.
- Yinelenen dondurma dönemleri yok.
Android, bir cihaz için sistem güncelleme politikası ayarlanırken bu testleri tekrarlar ve cihazın şu anki veya geçmişteki dondurma dönemlerini içerir.
Android, aşağıdaki durumlarda SystemUpdatePolicy.ValidationFailedException
atar
bunlardan hiçbiri başarısız olmaz.
Sistem güncelleme politikası nesnesinde daha önce ayarlanmış dondurma dönemlerinin listesini almak için:
yüklü tüm uygulamalar arayabilir
SystemUpdatePolicy.getFreezePeriods()
. Aşağıdakiler
örnek, cihazın donma dönemlerini günlüğe kaydetmek için bu yöntemi çağırır:
Kotlin
// Log any freeze periods that might be set on a system update policy. dpm.systemUpdatePolicy?.freezePeriods?.forEach { Log.i(TAG, "Freeze period: $it") }
Java
// Log any freeze periods that might be set on a system update policy. SystemUpdatePolicy currentPolicy = dpm.getSystemUpdatePolicy(); if (currentPolicy != null) { // A policy might not be set. for (FreezePeriod freezePeriod : currentPolicy.getFreezePeriods()) { Log.i(TAG, "Freeze period: " + freezePeriod.toString()); } }
Artık yıl
Android, aşağıdaki amaçlarla ISO 8601 takvimini (Gregoryen takvimi de denir) kullanır: dondurma dönemlerini hesaplar ve artık yılları yok sayar. Bu, 29 Şubat'ın geçerli bir tarih olarak tanınmaz ve 28 Şubat gibi kabul edilir. Dolayısıyla, 29 Şubat donma süresi hesaplanırken sayılmaz geçerlidir.
Geliştirme ve test
DPC'nizin sistem güncelleme özelliğini geliştirip test ederken birçok dondurma dönemi oluşturması gerekir. Android, 60 günlük bir aralık kontrol ettiği için geçmiş dondurma dönemleri arasında geçiş yaparsanız yeni bir dondurma dönemi ayarlayamayabilirsiniz. geçmiş dönemlerin kaydını temizlemeden ilerler. Cihazın donmasını temizlemek için periyot kaydı için Android Debug Bridge'de aşağıdaki komutu çalıştırın (adb) kabuk:
adb shell dpm clear-freeze-period-record
Kullanıcının sistem güncellemeleri arayüzü devre dışı bırakıldı.
Google Play sistem güncellemeleri (Mainline)
Google Play sistem güncellemeleri (Mainline güncellemeleri olarak da adlandırılır) otomatik olarak indirilir ancak yüklenmesi için cihazın yeniden başlatılması gerekir. Bu güncellemeler otomatik yeniden başlatma işlemini tetiklemez ve bunun yerine Bir sonraki kullanıcı, yönetici veya politika tarafından başlatılan yeniden başlatma işlemi. Sistem tarafından tetiklenen yeniden başlatma işlemleri güncelleme politikası, ilişkili Google/OEM sistem güncellemesini ve daha önce indirilen Google Play sistem güncellemeleri.
Google Play sistem güncellemeleri, Ayarlar > Hakkında > Android Sürümü > Google Play sistem güncellemesi.
Ek kaynaklar
Sistem güncellemeleri hakkında daha fazla bilgi için Android Açık Kaynak Projesi'nin OTA'sını okuyun. Güncellemeler dokümanları.