Hücresel veri planı, akıllı telefon kullanım ömrü boyunca cihazın kendi maliyetini aşabilir. Android 7.0 (API düzeyi 24) ve sonraki sürümlerde kullanıcılar, cihazlarının veri kullanımını optimize etmek ve daha az veri kullanmak için Veri Tasarrufu'nu cihaz genelinde etkinleştirebilirler. Bu özellik; dolaşımda, faturalandırma döneminin sonuna yaklaşırken veya ön ödemeli küçük bir veri paketi için özellikle faydalıdır.
Kullanıcı, Ayarlar'da Veri Tasarrufu'nu etkinleştirdiğinde ve cihaz verili bir ağa bağlandığında, sistem arka planda veri kullanımını engeller ve mümkün olduğunda uygulamaların ön planda daha az veri kullanması için sinyal gönderir. Veri Tasarrufu açık olsa bile kullanıcılar belirli uygulamaların arka planda ölçülen veri kullanımını kullanmasına izin verebilir.
Android 7.0 (API düzeyi 24), ConnectivityManager
API'nin kapsamını genişleterek, uygulamalara kullanıcının Veri Tasarrufu tercihlerini alma ve tercih değişikliklerini izleme olanağı sunar. Uygulamaların, kullanıcının Veri Tasarrufu'nu etkinleştirip etkinleştirmediğini kontrol etmesi ve ön plan ile arka plandaki veri kullanımını sınırlamaya çalışması iyi bir uygulama olarak kabul edilir.
Veri tasarrufu tercihlerini kontrol et
Uygulamalar, Android 7.0 (API düzeyi 24) ve sonraki sürümlerde hangi veri kullanımı kısıtlamalarının uygulandığını belirlemek için ConnectivityManager
API'yi kullanabilir. getRestrictBackgroundStatus()
yöntemi aşağıdaki değerlerden birini döndürür:
-
RESTRICT_BACKGROUND_STATUS_DISABLED
- Veri Tasarrufu devre dışı bırakıldı.
-
RESTRICT_BACKGROUND_STATUS_ENABLED
- Kullanıcı, bu uygulama için Veri Tasarrufu'nu etkinleştirdi. Uygulamalar ön planda veri kullanımını sınırlamaya ve arka plan veri kullanımı kısıtlamalarını sorunsuz bir şekilde ele almaya çaba göstermelidir.
-
RESTRICT_BACKGROUND_STATUS_WHITELISTED
- Kullanıcı Veri Tasarrufu'nu etkinleştirmiş ancak uygulamanın bunu atlamasına izin veriliyor. Uygulamalar yine de ön plan ve arka plandaki veri kullanımını sınırlamaya çalışmalıdır.
Veri Tasarrufu devre dışı bırakılmış veya uygulamanın atlamasına izin verilmiş olsa bile cihaz sayaçlı bir ağa bağlandığında veri kullanımını sınırlayın. Aşağıdaki örnek kod, uygulamanın ne kadar veri kullanması gerektiğini belirlemek için ConnectivityManager.isActiveNetworkMetered()
ve ConnectivityManager.getRestrictBackgroundStatus()
özelliklerini kullanır:
Kotlin
(getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).apply { // Checks if the device is on a metered network if (isActiveNetworkMetered) { // Checks user’s Data Saver settings. when (restrictBackgroundStatus) { RESTRICT_BACKGROUND_STATUS_ENABLED -> { // Background data usage is blocked for this app. Wherever possible, // the app should also use less data in the foreground. } RESTRICT_BACKGROUND_STATUS_WHITELISTED -> { // The app is allowed to bypass Data Saver. Nevertheless, wherever possible, // the app should use less data in the foreground and background. } RESTRICT_BACKGROUND_STATUS_DISABLED -> { // Data Saver is disabled. Since the device is connected to a // metered network, the app should use less data wherever possible. } } } else { // The device is not on a metered network. // Use data as required to perform syncs, downloads, and updates. } }
Java
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // Checks if the device is on a metered network if (connMgr.isActiveNetworkMetered()) { // Checks user’s Data Saver settings. switch (connMgr.getRestrictBackgroundStatus()) { case RESTRICT_BACKGROUND_STATUS_ENABLED: // Background data usage is blocked for this app. Wherever possible, // the app should also use less data in the foreground. case RESTRICT_BACKGROUND_STATUS_WHITELISTED: // The app is allowed to bypass Data Saver. Nevertheless, wherever possible, // the app should use less data in the foreground and background. case RESTRICT_BACKGROUND_STATUS_DISABLED: // Data Saver is disabled. Since the device is connected to a // metered network, the app should use less data wherever possible. } } else { // The device is not on a metered network. // Use data as required to perform syncs, downloads, and updates. }
Not: Bu davranış Android TV'de farklıdır. Android TV, arka plan kullanımını engellemek yerine yalnızca bunu kısıtlar. Uygulamalar ön planda
800 Kb/sn., arka planda uygulamalar ise
10 Kb/sn ile sınırlandırılır. TV'de veri kullanımının ne zaman sınırlanacağını belirlemek için ConnectivityManager.isActiveNetworkMetered()
özelliğini kullanın.
Veri kısıtlama izinleri isteyin
Uygulamanızın arka planda veri kullanması gerekiyorsa uygulamanızın paket adının URI'sini içeren bir Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
amacı göndererek veri kısıtlama izinleri isteyebilir (ör. package:MY_APP_ID
).
Niyet ve URI gönderildiğinde Ayarlar uygulaması açılır ve uygulamanız için veri kullanımı ayarları görüntülenir. Kullanıcı, daha sonra uygulamanız için arka plan verilerinin etkinleştirilip etkinleştirilmeyeceğine karar verebilir. Bu amacı göndermeden önce, kullanıcıya arka planda veri kullanımını etkinleştirmek için Ayarlar uygulamasını başlatmak isteyip istemediğini sormak iyi bir uygulamadır.
Veri tasarrufu tercihlerinde yapılan değişiklikleri izleme
Uygulamalar, ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED
dinlemek için bir BroadcastReceiver
oluşturarak ve alıcıyı Context.registerReceiver()
ile dinamik olarak kaydederek Veri Tasarrufu tercihlerinde yapılan değişiklikleri izleyebilir.
Bir uygulama bu yayını aldığında ConnectivityManager.getRestrictBackgroundStatus()
yöntemini çağırarak yeni Veri Tasarrufu tercihlerinin izinleri etkileyip etkilemediğini kontrol etmelidir.
Not: Sistem bu yayını yalnızca Context.registerReceiver()
ile dinamik olarak kaydolan uygulamalara gönderir.
Bu yayını manifest dosyalarında almak için kaydolan uygulamalar bunları almaz.
Android Debug Bridge komutlarıyla test etme
Android Hata Ayıklama Köprüsü (ADB), Veri Tasarrufu koşullarında uygulamanızı test etmek için kullanabileceğiniz birkaç komut sağlar. Uygulamanızı sınırsız ağlarda test etmek için ağ izinlerini kontrol edip yapılandırabilir veya kablosuz ağları sınırlı olarak ayarlayabilirsiniz.
-
$ adb shell dumpsys netpolicy
- Geçerli genel arka plan ağ kısıtlaması ayarını, Veri Tasarrufu'nu atlamasına izin verilen paket UID'lerini ve bilinen diğer paketlerin ağ izinlerini içeren bir rapor oluşturur.
-
$ adb shell cmd netpolicy
- Ağ Politikası Yöneticisi (netpolicy) komutlarının tam listesini gösterir.
-
$ adb shell cmd netpolicy set restrict-background <boolean>
-
sırasıyla
true
veyafalse
aktarılırken Veri Tasarrufu modunu etkinleştirir veya devre dışı bırakır. -
$ adb shell cmd netpolicy add restrict-background-whitelist <UID>
-
Arka planda ölçülen veri kullanımına izin vermek için belirtilen paket UID'sini izin verilenler listesine (
whitelist
) ekler. -
$ adb shell cmd netpolicy remove restrict-background-whitelist <UID>
-
Veri Tasarrufu etkin durumdayken arka planda ölçülen veri kullanımını engellemek için, belirtilen paket UID'sini izin verilenler listesinden (
whitelist
) kaldırır. -
$ adb shell cmd netpolicy list wifi-networks
- Tüm kablosuz ağları listeler ve ölçülü olup olmadıklarını gösterir.
-
$ adb shell cmd netpolicy set metered-network <WIFI_SSID> true
- Belirtilen SSID ile kablosuz bağlantıyı sayaçlı olarak ayarlar. Böylece, sınırsız bir ağ üzerindeki sayaçlı ağı simüle edebilirsiniz.