Ağ veri kullanımını optimize etme

Bir akıllı telefonun kullanım ömrü boyunca, hücresel veri planının maliyeti cihazın maliyetinden fazla olur. Android 7.0 (API düzeyi 24) ve daha yüksek olduğundan, kullanıcılar Veri Tasarrufu'nu cihaz genelinde etkinleştirebilir ve veri kullanımını optimize edip daha az veri kullanmalarına yardımcı oluyor. Bu yetenek faturalandırma döngüsünün sonuna doğru dolaşımdayken küçük bir ön ödemeli veri paketi içinde kullanılabilir.

Kullanıcı Ayarlar'da Veri Tasarrufu'nu etkinleştirdiğinde ve cihaz şu anda sayaçlı bir ağda ise sistem, arka plan veri kullanımını ve uygulamaların mümkün olduğunda ön planda daha az veri kullanmasına izin verir. Kullanıcılar şunları yapabilir: Belirli uygulamaların arka planda sayaçlı veri kullanımını kullanmasına izin ver Tasarruf açık.

Android 7.0 (API düzeyi 24), ConnectivityManager. Uygulamalara, kullanıcının Verileri'ni alma olanağı sunan API Tasarruf tercihleri ve izleme tercihini değişiklikler. Uygulamaların, gizlilik açısından güvenli olup Kullanıcı Veri Tasarrufu'nu etkinleştirdiğinde ön plan ve depolama alanı arka plan veri kullanımı.

Veri tasarrufu tercihlerini kontrol edin

Android 7.0 (API düzeyi 24) ve sonraki sürümlerde, uygulamalar ConnectivityManager API'si Böylece hangi veri kullanım kısıtlamalarının uygulandığını belirleyebilirsiniz. İlgili içeriği oluşturmak için kullanılan 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, veri kullanımını sınırlamaya çalışmalıdır ön planda kullanımını ve arka plan kısıtlamalarını veri kullanımı.
RESTRICT_BACKGROUND_STATUS_WHITELISTED
. Kullanıcı Veri Tasarrufu'nu etkinleştirdi, ancak uygulamanın bunu atlamasına izin verildi. Uygulamalar yine de ön plan ve arka plan veri kullanımını sınırlamaya çalışmalıdır.

Cihaz sayaçlı bir ağa bağlandığında, Veri Tasarrufu etkin olsa bile veri kullanımını sınırla veya uygulamanın bunu atlamasına izin verilir. Aşağıdaki örnek kod ConnectivityManager.isActiveNetworkMetered(). ve ConnectivityManager.getRestrictBackgroundStatus() kullanarak web sitenizin şunu kullanmalıdı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. Şunun yerine: Android TV arka plan kullanımını engellediğinde bunu yalnızca hızlandırır. uygulamalar 800 Kb/sn. ile sınırlıdır. Arka planda ise uygulamalar 10 Kb/sn ile sınırlıdır. Tekliflerinizi otomatikleştirmek ve optimize etmek için ConnectivityManager.isActiveNetworkMetered() işlemini algılamak için: TV'deki veri kullanımını sınırlandırın.

Veri kısıtlama izinleri isteme

Uygulamanızın arka planda veri kullanması gerekiyorsa veri isteğinde bulunabilir kısıtlayarak izinleri kısıtlama Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS. uygulamanızın paket adının URI'sını içeren intent: örneğin, package:MY_APP_ID.

Amaç ve URI gönderildiğinde Ayarlar uygulaması başlatılır ve uygulamanızın veri kullanımı ayarlarını görüntüler. Kullanıcı daha sonra arka plan verilerini etkinleştirin. Bu niyeti göndermeden önce kullanıcıya uygulamayı kendiniz kullanmak isteyip istemediğini Arka plan verilerini etkinleştirmek için kullanılan Ayarlar uygulaması bazı yolları da görmüştük.

Veri tasarrufu tercihlerinde yapılan değişiklikleri izleme

Uygulamalar Veri Tasarrufu tercihlerinde yapılan değişiklikleri izlemek için BroadcastReceiver - ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED ve dinamik olarak dinleme alıcıyı Context.registerReceiver(). Bir uygulama bu yayını aldığında yeni Veri Tasarrufu'nun kullanılıp kullanılmadığını tercihlerinin izinlerini etkilediğini ConnectivityManager.getRestrictBackgroundStatus().

Not: Sistem bu yayını yalnızca bunları Context.registerReceiver(). Bu yayını kendi manifestlerinde almak için kaydolan uygulamalar bunları almaz.

Android Debug Bridge komutlarıyla test etme

Android Debug Bridge (ADB) uygulamanızı Veri Tasarrufu'nda test etmek için kullanabileceğiniz birkaç komut sağlar koşullar. Ağı kontrol edip yapılandırabilirsiniz uygulamanızı sayaçsız cihazlarda test etmek için izinlerinizi veya kablosuz ağları sınırlı olarak ayarlayın ağlar.

$ adb shell dumpsys netpolicy
. Mevcut global arka plan ağını içeren bir rapor oluşturur kısıtlama ayarını, Veri Tasarrufu'nu atlamasına izin verilen paket UID'lerini ve ağ izinlerini kontrol eder.
$ adb shell cmd netpolicy
. Ağ Politikası Yöneticisi (netpolicy) komutlarının tam listesini görüntüler.
$ adb shell cmd netpolicy set restrict-background <boolean>
. true veya Sırasıyla false.
$ adb shell cmd netpolicy add restrict-background-whitelist <UID>
. Arka plana izin vermek için belirtilen paket UID'sini izin verilenler listesine (whitelist) ekler sayaçlı veri kullanımı.
$ adb shell cmd netpolicy remove restrict-background-whitelist <UID>
. Belirtilen paket UID'sini engellemek için izin verilenler listesinden (whitelist) kaldırır arka plan sayaçlı veri kullanımını gösterir.
$ adb shell cmd netpolicy list wifi-networks
. Tüm kablosuz ağları listeler ve sayaçlı olup olmadıklarını gösterir.
$ adb shell cmd netpolicy set metered-network <WIFI_SSID> true
. Belirtilen SSID ile kablosuz ağı sayaçlı olarak ayarlar. Böylece, sayaçlı ağ bağlantısı kullanır.