🌞Foreground Service
Android'de ön planda çalışan servisler
🔰 Temel Hususlar

🔸 Kullanıcının bildirim veya arayüz ile haberi olan arka plan görevleridir
💎 Önceli servislerdir ve öncelik seviyesi bildirilmelidir
🔔 Kullanıcıya kaldırılamayan bir bildirim gösterilmesi zorunludur
🌃 Kullanıcının arka plan işlemlerinden haberdar olması amaçlanır
👮♂️ Servisin çalıştırılması için
FOREGROUND_SERVICE
iznine ihtiyaç duyulur👣 Android'in izin isteme hiyerarşisine uygun ilerler
🐞 İzin alınmadığı taktirde
SecurityException
hatası verir
👮♂️ Gerekli İzinleri Alma
Android 8.0 ve sonrası için
FOREGROUND_SERVICE
iznine ihtiyaç duyulurÖrnek izin sistemi için alttaki kodu kullanabilirsiniz
static final int PERMISSION_FOREGORUND = 1;
void startTelemetryService() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.FOREGROUND_SERVICE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.FOREGROUND_SERVICE)) {
Toast.makeText(this, "Haberleşme hizmeti için izne ihtiyaç vardır", Toast.LENGTH_SHORT).show();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.FOREGROUND_SERVICE}, PERMISSION_FOREGORUND);
}
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.FOREGROUND_SERVICE}, PERMISSION_FOREGORUND);
}
}
} else {
startService(new Intent(this, TelemetryService.class));
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSION_FOREGORUND) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startTelemetryService();
}
}
}
🧱 Temel Yapıyı Oluşturma
public class TelemetryService extends Service {
private static final String TAG = "TelemetryService";
private Looper telemetryLooper;
private TelemetryHandler telemetryHandler;
public TelemetryService() {
}
private final class TelemetryHandler extends Handler {
public TelemetryHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(@NonNull Message msg) {
try {
Log.i(TAG, "Mesaj alındı");
Thread.sleep(1000);
} catch (InterruptedException e) {
// Kesme isteği geldiğinde isteği uygulama
Thread.currentThread().interrupt();
}
stopSelf(msg.arg1);
}
}
@Override
public void onCreate() {
Log.i(TAG, "Servis oluşturuldu");
// Arkaplanda çalışacak thread'in tanımlanması ve başlatılması (UI thread'i bloklamaması lazım)
HandlerThread thread = new HandlerThread("TelemetryStartArguments", Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
telemetryLooper = thread.getLooper();
telemetryHandler = new TelemetryHandler(telemetryLooper);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "Servis başlatıldı");
Message msg = telemetryHandler.obtainMessage();
msg.arg1 = startId; // İsteklerin yönetimi için kimlikleri saklamalıyız
telemetryHandler.sendMessage(msg);
// Eğer servis öldüyse, bu dönüşten sonra Intent'siz tekrar başlat
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
// TODO: Return the communication channel to the service.
// throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onDestroy() {
Log.i(TAG, "Servis kapatıldı");
}
}
🔔 Bildirim Ekleme
https://github.com/yemreak/yemreakcom/blob/main/docs/arsiv/android/arkaplan/notification-1/README.md🔗 Faydalı Bağlantılar
Last updated
Was this helpful?