Pil Seviyesini ve Şarj Durumunu İzleme

Arka plan güncellemelerinin etkisini azaltmak için bunların sıklığını değiştirdiğinizde ilgili güncellemeleri almak, mevcut pil seviyesini ve şarj durumunu kontrol etmek başlatabilirsiniz.

Uygulama güncellemelerinin yapılmasının pil ömrüne etkisi, pil seviyesine ve cihazın şarj durumu. Cihaz AC üzerinden şarj olurken güncelleme yapmanın etkisi Önemsiz olduğundan çoğu durumda, cihaz bağlıyken yenileme hızınızı en üst düzeye çıkarabilirsiniz duvara takılı bir şarj cihazına bağlayın. Buna karşılık, cihaz boşalıyorsa güncelleme hızınızı azaltarak pil ömrünü uzatır.

Benzer şekilde pilin şarj seviyesini kontrol ederek hatta şarjı bitmek üzereyken güncellemeler bile durdurulur.

Mevcut şarj durumunu belirleme

Geçerli ödeme durumunu belirleyerek başlayın. BatteryManager tüm pil ve şarj ayrıntılarını şunu içeren sabit bir Intent içinde yayınlar: şarj durumunu.

Niyet (yapışkan) olduğundan BroadcastReceiver kaydetmeniz gerekmez. registerReceiver öğesini çağırmanız yeterlidir. Sonraki snippet'te gösterildiği gibi alıcı olarak null, mevcut pil durumu niyeti geri döndü. Buraya gerçek bir BroadcastReceiver nesnesi aktarabilirsiniz, ancak gerekli değildir, güncellemeleri sonraki bir bölümde ele alacağız.

Kotlin

val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
    context.registerReceiver(null, ifilter)
}

Java

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);

Hem mevcut şarj durumunu hem de cihaz şarj oluyorsa kullanıcının şarj olup olmadığını kontrol edebilirsiniz. USB veya AC şarj cihazıyla şarj oluyor:

Kotlin

val status: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1) ?: -1
val isCharging: Boolean = status == BatteryManager.BATTERY_STATUS_CHARGING
        || status == BatteryManager.BATTERY_STATUS_FULL

// How are we charging?
val chargePlug: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) ?: -1
val usbCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_USB
val acCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_AC

Java

// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;

// How are we charging?
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

Genelde, cihazınızın arka plan güncellemelerinin oranını en üst düzeye çıkarmanız gerekir. Bunun için cihazınızın AC şarj cihazına bağlandığında, şarj USB üzerindenyse hızı azaltın ve devam edebilirsiniz.

Şarj durumundaki değişiklikleri izleme

Şarj durumu, bir cihaz fişe takılı olabileceği için kolayca değişebilir, dolayısıyla değişiklikleri görmek için şarj durumunu izleyin ve yenileme hızınızı buna göre değiştirin.

BatteryManager, cihaz her bağlandığında veya güç bağlantısı kesildi. Uygulamanız açık değilken bile bu etkinlikleri almanız özellikle de bu etkinlikler uygulamanızı ne sıklıkta başladığınızı Bir arka plan güncellemesi başlatın. Bu nedenle,BroadcastReceiver Amaç filtresindeki ACTION_POWER_CONNECTED ve ACTION_POWER_DISCONNECTED.

<receiver android:name=".PowerConnectionReceiver">
  <intent-filter>
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
  </intent-filter>
</receiver>

Mevcut pil seviyesini belirleme

Bazı durumlarda, geçerli pil seviyesinin belirlenmesi de yararlı olur. Trafiğin zirve yaptığı saatleri, pil şarjı belirli bir seviyenin altında olduğunda arka plan güncelleme hızınızı.

Mevcut pil seviyesini çıkarıp pil durumunun amacı aşağıda gösterildiği gibidir:

Kotlin

val batteryPct: Float? = batteryStatus?.let { intent ->
    val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
    val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
    level * 100 / scale.toFloat()
}

Java

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float batteryPct = level * 100 / (float)scale;

Pil seviyesindeki önemli değişikliklere tepki verme

Pil durumunu sürekli olarak izleyemezsiniz, ancak bunu yapmanız gerekmez.

Genel anlamda, pil seviyesini izlemenin etkisi pil üzerinde, uygulamanızın normal davranışından daha fazla etkisi olur. Örneğin, bir Manifest dosyasındaki BroadcastReceiver, pil azaldığında beklemedeki çalışmaları iptal eder esasen pilin daha fazla tükenmesine neden olur (ve dolayısıyla olduğundan Android 8.0). Bunun yerine işin ne zaman yürütülmesi gerektiğini açıklayan iş kısıtlamaları sağlayabilirsiniz. Bu da sistemin uygulamanızı başlatmadan önce karar vermesini sağlar.

Arka plan güncellemelerinizi pil seviyesi doluyken çalıştırmamak genellikle kritik önem taşır. Telefon siz gelmeden kendi kendine kapanıyorsa verilerinizin ne kadar yeni olduğu önemli değildir nasıl yararlanabileceğini belirleyin. Bunu yapmak için WorkManager kitaplığını kullanma şununla: BatteryNotLow kısıtlaması pil seviyesi düşükse çalışmanın yapılmaması gerektiğini belirtmek için (geçerli NetworkType kısıtlama).

Çoğu durumda bir cihazın şarj edilmesi, yuvaya yerleştirilmesi ile tesadüfen gerçekleşebilir. Sonraki Bu ders, mevcut yuva durumunu nasıl belirleyeceğinizi ve cihazdaki değişiklikleri nasıl izleyeceğinizi gösterir yuvaya yerleştiriliyor.