GİRİŞ
Mobil uygulama geliştirme sürecinde, cihazın donanımsal ve sistemsel durumlarına tepki verebilen uygulamalar geliştirmek oldukça önemlidir. Android işletim sistemi, bu tür durumlar için geliştiricilere BroadcastReceiver mekanizmasını sunar. Bu yapı sayesinde uygulamalar, pil durumu, ağ bağlantısı veya ekran durumu gibi sistem olaylarını dinleyebilir ve buna uygun aksiyonlar alabilir.Bu makalede, pil seviyesi düştüğünde kullanıcıyı bilgilendiren basit bir Android uygulamasının geliştirilmesi ele alınmaktadır.
BroadcastReceiver Yapısı
BroadcastReceiver, Android’de sistem veya uygulama tarafından yayılan (broadcast) olayları dinleyen bir bileşendir. Pil seviyesinin düşmesi gibi durumlar da sistem tarafından yayınlanan olaylar arasında yer alır.
Bu projede kullanılan yayın türü:
- ACTION_BATTERY_LOW: Pil seviyesi kritik seviyeye düştüğünde tetiklenir.
- ACTION_BATTERY_CHANGED: Pil seviyesi kritik seviyeye düştüğünde tetiklenir.
Uygulama Geliştirme Aşamaları
Projede BroadcastReceiver’ı ACTION_BATTERY_LOW ile sadece “uyarı” için kullanıp, ekranda sürekli güncel yüzdeli gösterim yapmak için ACTION_BATTERY_CHANGED intent’ kullanacağız.
Uygulama adımlarına tek tek bakalım.
PAKET ADI : Projede paket adı (uygulama adı) batteryapp olarak belirlenmiştir.
1 Proje Oluşturma
İlk olarak Android Studio ortamında yeni bir proje oluşturulur.
- Proje türü: Empty Activity
- Programlama dili: Java
2 Main Activiy ile Pil Durumu Gösterilmesi
Uygulama açıldığında ekranda mevcut pil durumunu gösteren bir activty ekleyelim. Bunun için sistem pil durumunu sürekli broadcast eder → biz bunu dinleyip yüzdeyi alırız.
MainActivity.java
package com.example.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
TextView txtBattery;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtBattery = findViewById(R.id.txtBattery);
// Pil durumunu dinle
registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
private final BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
int batteryPct = (int) ((level / (float) scale) * 100);
txtBattery.setText("Pil: %" + batteryPct);
// ???? DÜŞÜK PİL UYARISI
if (batteryPct <= 15) {
Toast.makeText(context, "Pil seviyesi düşük!", Toast.LENGTH_LONG).show();
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(batteryReceiver);
}
}
activitymain.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/txtBattery"
android:layout_width="250dp"
android:layout_height="128dp"
android:layout_centerInParent="true"
android:layout_marginStart="79dp"
android:layout_marginTop="254dp"
android:text="Pil: %"
android:textSize="60sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
3 Pil Uyarısı İÇİN BroadcastReceiver Sınıfının Tanımlanması
Projede, pil seviyesi düştüğünde tetiklenecek bir BroadcastReceiver sınıfı oluşturulur. Bu sınıf, sistemden gelen yayını dinleyerek kullanıcıya bir mesaj gösterir.
package com.example.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class BatteryReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BATTERY_LOW.equals(intent.getAction()))
{
Toast.makeText(context, "Pil seviyesi düşük!", Toast.LENGTH_LONG).show();
}
}
}
Bu kodda, onReceive metodu sayesinde gelen intent kontrol edilmekte ve pil seviyesinin düşük olduğu durumda kullanıcıya bir Toast mesajı gösterilmektedir.
4 AndroidManifest Dosyasına Tanımlama
BroadcastReceiver’ın çalışabilmesi için AndroidManifest.xml dosyasına eklenmesi gerekmektedir.
<receiver
android:name=".BatteryReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BATTERY_LOW"/>
</intent-filter>
</receiver>
Bu tanımlama sayesinde uygulama, sistem tarafından gönderilen pil düşük uyarılarını dinleyebilir hale gelir.
android:exported="true" → başka uygulamalar da çağırabilir
android:exported="false" → sadece senin uygulaman kullanır
Ancak Andorid 8 ve sonrasında gerekli olmayabilir. Özellikle 12–15 arası:
- Çoğu implicit broadcast (BATTERY_LOW dahil)
- ❌ manifest’ten dinlenemez
- ✔️ sadece runtime (kod içinde) register edilirse çalışır
5 UYGULAMANIN TEST EDİLMESİ
Uygulama gerçek cihaz veya emülatör üzerinde test edilebilir.
Gerçek cihazda test:
- Pil seviyesi %15’in altına düşürüldüğünde Toast mesajı görüntülenir.
Emülatörde test:
- Extended Controls menüsüne girilir
- Battery sekmesinden pil seviyesi düşürülür
Bu işlemler sonucunda uygulamanın doğru şekilde çalıştığı gözlemlenir.
4. SONUÇ
Bu çalışmada, Android platformunda BroadcastReceiver kullanılarak sistem olaylarına tepki veren bir uygulama geliştirilmiştir. Pil seviyesi düştüğünde kullanıcıya anlık geri bildirim verilmesi sağlanmıştır.
Bu yaklaşım, enerji yönetimi, kullanıcı bilgilendirme ve sistem entegrasyonu açısından önemli bir temel oluşturmaktadır. İlerleyen aşamalarda bu yapı, bildirim (notification) sistemleri ile genişletilerek daha gelişmiş kullanıcı deneyimleri oluşturulabilir.