Uygulamanız Android 11 (API düzeyi 30) veya sonraki bir sürümü hedefliyorsa ancak kullanıcı hedeflemiyorsa birkaç ay boyunca uygulamanızla etkileşimde bulunursanız sistem, hazırda bekleme durumunda olan bir uygulama kullanıyorsanız. Sistem, 2022'den beri depolama alanı için korurken sistem de kullanıcı verilerini koruyor. Bu sistem davranışı benzerdir Kullanıcı uygulamanızı sistem ayarlarından manuel olarak zorla durdurduğunda ne olacağına bakalım.
Hazırda beklemenin etkileri
Tablo 1'de gösterildiği gibi hazırda beklemenin etkileri uygulamanızın hedef SDK'sına bağlıdır sürümünün yanı sıra uygulamanızın yüklü olduğu cihaz türü de bulunur:
Hedef SDK sürümü | Cihazın özellikleri | Hazırda bekleme efektleri |
---|---|---|
Android 12 veya sonraki sürümler | Android 12 veya sonraki sürümleri çalıştıran cihazlar |
Uygulamanızın çalışma zamanı izinleri sıfırlanır. Bu işlem, kullanıcının sistem ayarlarında bir izin görüntüledi ve uygulamanızın erişim düzeyini değiştirdi Deny değerine ayarlayın. Uygulamanız arka planda iş veya uyarı çalıştıramaz. Uygulamanız, yüksek öncelikli olanlar da dahil olmak üzere push bildirimlerini alamıyor. üzerinden gönderilen iletiler Firebase Cloud Mesajlaşma. Şuradaki tüm dosyalar: uygulamasının önbellek kaldırılır. |
Android 11 | Android 11'i çalıştırır | Uygulamanızın çalışma zamanında istenen izinler sıfırlanır. |
Android 11 | Android 6.0 (API düzeyi 23) ile Android 10 (API düzeyi 29) arasındaki sürümleri çalıştırır. ve Google tarafından desteklenmektedir. Play Hizmetleri |
Uygulamanızın çalışma zamanında istenen izinler sıfırlanır. Bu davranış Aralık 2021'den itibaren geçerli olacaktır. Bu blogda daha fazla bilgi edinin hakkında yayınla oluşturma izinleri otomatik sıfırlama özelliği milyarlarca cihaz tarafından kullanılabilir. |
Bir uygulama hazırda bekleme modundan çıktığında uygulanan sistem davranışı
Kullanıcı uygulamanızla bir sonraki etkileşimde bulunduğunda uygulamanız hazırda bekleme modundan çıkar ve tekrar iş, uyarı ve bildirim oluşturabilir.
Ancak sistem, uygulamanız için aşağıdakileri yapmaz:
Uygulamanızın çalışma zamanında istenen izinlerini yeniden verin.
Kullanıcının uygulamanız için bu izinleri yeniden vermesi gerekir.
Daha önce planlanmış olan tüm işleri, uyarıları ve bildirimleri yeniden planlayın uygulamanız hazırda beklemeye alındı.
Bu iş akışını daha kolay desteklemek için WorkManager değerleridir. Ayrıca şunları da ekleyebilirsiniz: yeniden çizelgeleme
ACTION_BOOT_COMPLETED
yayın alıcı (uygulamanız hazırda bekleme modundan çıktığında ve yapmanız gerekir.
Uygulama kullanımı
Aşağıdaki bölümlerde uygulama kullanımıyla ilgili örneklerin yanı sıra ve sistemin uygulama kullanımı olarak kabul etmediği işlemlerdir.
Uygulama kullanımına örnekler
Uygulamanızdaki bir etkinlik devam ettirildiğinde, sistem bu etkinliği bir kullanıcı etkileşimi olarak kabul eder. Dolayısıyla, sistem, uygulamanızın hazırda bekleme moduna geçmesi için geçmesi gereken süreyi uzatır.
Android 11 ve sonraki sürümlerde aşağıdaki davranışlar da kullanıcı etkileşimleri olarak kabul edilir:
Hazırda bekleme için uygulama kullanımının açıkça kullanıcı etkileşimi. Paketin bir bileşeni çağrıldığı sürece hâlâ çalışır değerlendirilebilir. Bu tür içeriğe ilişkin bazı örnekler:
- Cihazdaki başka bir uygulamaya bağlı bir hizmet veya içerik sağlayıcısı olan uygulamalar veya işletim sistemi. Örneğin, Giriş Yöntemi Düzenleyicileri (IME'ler) veya şifre yöneticileri.
Paketteki yayın alıcıları, harici pakettir.
Örnek olmayanlar
Uygulamanız yalnızca aşağıdaki listede açıklanan davranışları sergiliyorsa: Uygulamanız birkaç ay sonra hazırda beklemeye girer:
- Planlanmış bir işi şununla çalıştırır:
JobScheduler
. - Örtülü bir yayın alır.
- Alarmları programlar.
Hazırda bekleme modundan çıkacak sistem muafiyetleri
Android, belirli kullanım durumlarında uygulamayı hazırda bekletme özelliğinden sistem düzeyinde muafiyetler sağlar. Uygulamanız aşağıdaki kategorilerden birine giriyorsa uygulama muaftır uygulama kullanım standartlarından farklıdır ve hazırda beklemeye alınmaz.
- Başlatıcıda gösterilmeyen uygulamalar
- Başlatıcıda etkin bir kısayol kutusu olmayan uygulamalar.
- İş profili uygulamaları
- Kullanıcının iş profiline yüklediği tüm uygulamalar. Aynı uygulama kişisel bir profilde de bulunuyorsa yalnızca işin hariç tutulabilir.
- Cihaz politikası denetleyicileri
- Cihazlardaki yerel cihaz politikalarını ve sistem uygulamalarını kontrol eden uygulamalar.
- Operatöre özel uygulamalar
- Cep telefonu operatörlerinin cihazlara önceden yüklediği ve şunlar için gerekli gördüğü uygulamalar: sesli mesaj veya müşteri hizmetleri uygulamaları gibi sözleşmeden doğan hizmet yükümlülükleri.
- 3. taraf yükleyici uygulamaları
- Yüklü uygulamalarının otomatik olarak güncellenmesi için üçüncü taraf uygulama mağazaları .
Hazırda bekleme süresinden kullanıcı muafiyetleri
Uygulamanızdaki temel kullanım alanlarından birinin hazırda bekleme modundan etkileneceğini tahmin ediyorsanız Kullanıcıdan uygulamayı hazırda bekletme modundan muaf tutmasını isteyebilirsiniz. Bu muafiyet Kullanıcının, uygulamanızın öncelikli olarak çalışmasını beklediği durumlar için yararlıdır kullanıcı uygulamanızla etkileşime geçmese bile (örneğin, uygulamanız aşağıdakilerden herhangi birini yapıyor:
- Ailenin konumunu düzenli aralıklarla bildirerek aile güvenliği sağlayın ele alacağız.
- Bir cihaz ile uygulamanızın sunucusu arasında verileri senkronize edin.
- TV gibi akıllı cihazlarla iletişim kurma.
- Kol saati gibi tamamlayıcı cihazlarla eşleyin.
Muafiyet isteğinde bulunmak için aşağıdaki bölümlerde yer alan adımları tamamlayın.
Kullanıcının, uygulamanız için hazırda bekletmeyi devre dışı bırakıp bırakmadığını kontrol edin
Kullanıcının, uygulamanız için hazırda bekletmeyi zaten devre dışı bırakıp bırakmadığını kontrol etmek üzere
getUnusedAppRestrictionsStatus()
bağlantısını kullanın.
API'ye gidin.
Uygulamanızda bu API'yi nasıl kullanacağınızla ilgili ek ayrıntılar için bkz. API kod örneğine göz atın.
Kullanıcıdan uygulamanızın hazırda bekletmeyi devre dışı bırakmasını isteyin
Kullanıcı, uygulamanız için hazırda bekletmeyi daha önce devre dışı bırakmadıysa bir kullanıcıya isteği gönderir. Bunun için aşağıdaki adımları uygulayın:
- Kullanıcıya neden devre dışı bırakması gerektiğini açıklayan bir kullanıcı arayüzü gösterin hazırda beklemeye almanız gerekir.
-
createManageUnusedAppRestrictionsIntent()
çağır API kodu örneğinde gösterildiği gibi API'yi seçin. Bu API, Ayarlar'daki Uygulama bilgileri ekranını yükleyen bir intent oluşturur. Buradan kullanıcı, uygulamanızın hazırda bekletme özelliğini devre dışı bırakabilir.startActivityForResult()
adlı kişiyi aramanız önemlidirstartActivity()
.Tablo 2'de gösterildiği gibi, seçeneğin konumu ve adı uygulamanızın yüklü olduğu cihazın özellikleri:
Tablo 2. Cihazınızda hazırda bekletmeyi devre dışı bırakan uygulama Cihazın özellikleri Seçeneğin gösterildiği sayfa Devre dışı bırakma seçeneğinin adı Android 13 veya sonraki sürümleri çalıştıran cihazlar Uygulama bilgisi Kullanılmayan uygulama etkinliğini duraklatma Android 12'yi çalıştırır. Uygulama bilgisi İzinleri kaldırıp yer açma Android 11'i çalıştırır Uygulama bilgileri > İzinler Uygulama kullanılmıyorsa izinleri kaldırma Android 6.0 ile Android 10 dahil olmak üzere sürümleri çalıştıran ve Google Play tarafından desteklenmektedir hizmetler Play uygulaması > Menü > Play Protect > Kullanılmayanlar için İzinler Uygulamalar Uygulama kullanılmıyorsa izinleri kaldırma
API kodu örneği
Bu kod örneğinde, ve kullanıcılardan uygulamanız için hazırda bekletmeyi devre dışı bırakmalarını istemenin doğru yolunu bulun.
Kotlin
val future: ListenableFuture<Int> = PackageManagerCompat.getUnusedAppRestrictionsStatus(context) future.addListener({ onResult(future.get()) }, ContextCompat.getMainExecutor(context)) fun onResult(appRestrictionsStatus: Int) { when (appRestrictionsStatus) { // Couldn't fetch status. Check logs for details. ERROR -> { } // Restrictions don't apply to your app on this device. FEATURE_NOT_AVAILABLE -> { } // The user has disabled restrictions for your app. DISABLED -> { } // If the user doesn't start your app for a few months, the system will // place restrictions on it. See the API_* constants for details. API_30_BACKPORT, API_30, API_31 -> handleRestrictions(appRestrictionsStatus) } } fun handleRestrictions(appRestrictionsStatus: Int) { // If your app works primarily in the background, you can ask the user // to disable these restrictions. Check if you have already asked the // user to disable these restrictions. If not, you can show a message to // the user explaining why permission auto-reset or app hibernation should be // disabled. Then, redirect the user to the page in system settings where they // can disable the feature. val intent = IntentCompat.createManageUnusedAppRestrictionsIntent(context, packageName) // You must use startActivityForResult(), not startActivity(), even if // you don't use the result code returned in onActivityResult(). startActivityForResult(intent, REQUEST_CODE) }
Eski platform API'si
İşletim sistemi, hazırda bekleme ile etkileşim kurmak için bir API de içerir. özelliğini kullanabilirsiniz. Ancak API yalnızca Android 11 veya sonraki sürümleri çalıştıran cihazlarda çalışır; API, önceki sürüme geri taşınan hazırda bekleme özelliklerini işlemez Android sürümleri. Bu nedenle, API'yi kullanmanız önerilmez.
Uyumluluk amacıyla API'yi geçici olarak kullanmaya devam etmeniz gerekiyorsa nasıl kullanılacağı aşağıdaki listede gösterilmektedir:
- Uygulamanızda hazırda beklemenin devre dışı bırakılıp bırakılmadığını kontrol etmek için:
isAutoRevokeWhitelisted()
- Kullanıcıyı hazırda bekleme ayarları sayfasına göndermek için:
ACTION_APPLICATION_DETAILS_SETTINGS
kullanarak bir Intent oluşturun
Hazırda bekleme davranışını manuel olarak başlat
Sistem uygulamanızı hazırda bekleme moduna aldıktan sonra uygulamanızın nasıl davrandığını test etmek için aşağıdaki adımları tamamlayın:
(Yalnızca Android 12 ve sonraki sürümler) Cihazınızda hazırda bekleme davranışını etkinleştirin. cihaz:
adb shell device_config put app_hibernation app_hibernation_enabled true
Sistemin hazırda bekleme moduna girmek için beklediği varsayılan süreyi ayarlayın. Bu şekilde, dosyayı test ettikten sonra geri yükleyebilirsiniz:
threshold=$(adb shell device_config get permissions \ auto_revoke_unused_threshold_millis2)
Sistemin beklediği süreyi azaltın. Aşağıdaki örnekte, sistem, uygulamanızın yalnızca bir saniye hazırda beklemeye gireceği şekilde değiştirilmiş Uygulamayla etkileşimi bıraktıktan sonra:
adb shell device_config put permissions \ auto_revoke_unused_threshold_millis2 1000
Şu dosyayı çalıştırarak test cihazınızda başlatma zamanı yayınlarının tamamlanmasını bekleyin: şu komutu kullanın:
adb shell am wait-for-broadcast-idle
Yayınlar tamamlandığında, bu komut şu mesajı döndürür:
All broadcast queues are idle!
.Uygulamayı hazırda bekletme işlemini manuel olarak başlatın:
adb shell cmd jobscheduler run -u 0 -f \ com.google.android.permissioncontroller 2
(Yalnızca Android 12 ve sonraki sürümler) Uygulamayı kullanarak hazırda beklemeye alındığını onaylayın aşağıdaki yöntemlerden birini tercih edebilirsiniz:
- Test cihazında artık, test sırasında kullanılmayan uygulamalar hazırda bekletilir.
Aşağıdaki komutu çalıştırın:
adb shell cmd app_hibernation get-state PACKAGE-NAME
Sistemin yerleştirmeden önce beklediği varsayılan süreyi geri yükle hazırda beklemeye alınır:
adb shell device_config put permissions \ auto_revoke_unused_threshold_millis2 $threshold