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 olduğunu bildirir 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 iş profiline (profil sahibi olarak adlandırılır) sahip olabilir. 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
Beklemede olan 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.
Beklemedeki 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
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. PBM'nizin geri aramayı alması için kayıt yaptırmanız veya reklam yayınlamanız gerekmez. 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 aralığının 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ünlük süre sona erdiğinde sistem, cihaz kullanıcısından 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 şu anda ayarlanmamış.
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. Dondurma dönemindeki bir cihaz 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, cihazın süresiz olarak dondurulmasını önlemek için tanımlanan dondurma dönemlerinden sonra zorunlu bir 60 günlük ara dönem uygular. Sistem güncellemelerini dondurmanın, cihazların kritik güncellemeleri almasını engelleyebileceğini unutmayın.
Bir güncelleme politikasında dondurma dönemleri ayarlarsınız. Politika belirlemeden dondurma dönemleri ayarlayamazsınız. 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 belirlemeden önce cihaz için. Adımlar şu şekildedir:
- Yeni bir sistem güncelleme politikası oluşturun (veya mevcut politikayı alın).
setFreezePeriods()
çağrısını yaparak politikadaki dondurma dönemlerini ayarlayın.- Şu numarayı arayarak cihaz için politikayı ve dondurma dönemlerini ayarlayın:
setSystemUpdatePolicy()
.
Dondurulma süresi her yıl tekrarlandığından, dönemi ay ve gün değerleriyle temsil edilir. Başlangıç günü, önceki bir dondurma döneminin bitiminden en az 60 gün sonra başlamalıdır. Aşağıdaki örnekte, mevcut bir sistem güncelleme politikası için iki dondurma dönemi nasıl ayarlayabileceğiniz gösterilmektedir:
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.
Yüklü tüm uygulamalar, daha önce bir sistem güncelleme politikası nesnesinde ayarlanan dondurma dönemlerinin listesini almak için SystemUpdatePolicy.getFreezePeriods()
işlevini çağırabilir. 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. Bu nedenle, dondurma döneminin süresi hesaplanırken 29 Şubat dikkate alınmaz.
Geliştirme ve test
DPC'nizin sistem güncelleme özelliğini geliştirip test ederken birçok dondurma dönemi oluşturmanız gerekebilir. 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 bölümüne giderek manuel olarak da yüklenebilir.
Güncellemeyi geri alma
Bazı durumlarda Google Play Sistem Güncellemesi Geri Alma (GPSUR) aracı, Sorunlu bir Google Play Sistem Güncellemesi nedeniyle cihaz durumunu kurtarmak için kullanıldı teşekkür ederiz. Bu araç ileri düzey kullanıcılar tarafından veya kullanıcıya yönlendirildiğinde kullanılmalıdır bu nedenle veri kaybına neden olabileceği için GPSUR şu şekilde kullanılır: araç:
- Makinenizde Android Debug Bridge (adb) çalışıyorsa uygulamayı durdurun.
adb hizmetini kullanmaya devam etmeden önce,
geri alabilir. Adb'yi durdurmak için
adb kill-server
komutunu çalıştırın. - GPSUR aracını açın.
- Aracın adb üzerinden test cihazınızla iletişim kurmasına izin vermek için ADB erişimine izin ver'i tıklayın.
- Yeni cihaz ekle'yi tıklayın.
- Listeden cihazınızı seçin ve Bağlan'ı tıklayın. Bu listede tam cihaz adını içermelidir.
- Cihazınızın ekranında Bu bilgisayardan her zaman izin ver'i seçin ve USB hata ayıklama bağlantısını kabul etmek için Tamam'ı tıklayın.
- Tarayıcınızda bağlı cihazı seçin.
- Sayfadaki düğme metni, Geri Alma Yok yerine Cihazınızda geri alma özelliği varsa Son Güncellemeleri Geri Al. Son Güncellemeleri Geri Al'ı tıklayın.
- Geri Almayı Onayla iletişim kutusundaki uyarıları okuyup Onayla'yı tıklayın.
- Geri alma işleminin tamamlanmasını bekleyin. İşlem tamamlandığında Geri Alma Başarılı kalıcı pencere görünür ve cihaz yeniden başlatılır. Artık cihazınızı güvenli bir şekilde çıkarabilirsiniz olanak tanır.
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ı.