qori.dev

Notifikasi Foreground Service di Flutter

· Qori El-Hafizh

Foreground service pada Android adalah sebuah operasi yang diketahui oleh pengguna meskipun pengguna tidak berinteraksi secara langsung dengan aplikasi. Pengguna dapat melihat proses sebuah Foreground Service dari notifikasi yang muncul.

Foreground Service di Flutter

Post ini membahas cara menampilkan notifikasi Foreground Service dengan plugin flutter_local_notification. Foreground Servicenya sendiri bisa berupa proses yang memakan waktu lama misalnya sebuah timer.

Tutorial

Android Manifest

Masukan kode dibawah ke AndroidManifest.xml di dalam tag <application>.

<service
android:name="com.dexterous.flutterlocalnotifications.ForegroundService"        
android:exported="false"
android:stopWithTask="false"/>

android:stopWithTask menandakan notification akan berhenti jika aplikasi ditutup.

Kemudian tambahkan juga permission untuk foreground service

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

Masukan kode tersebut didalam tag <manifest>

Sisi Flutter

Inisialisasi Notification Plugin

const AndroidInitializationSettings initializationSettingsAndroid =
      AndroidInitializationSettings('app_icon');

final InitializationSettings initializationSettings = InitializationSettings(
    android: initializationSettingsAndroid,
    );

    await flutterLocalNotificationsPlugin.initialize(initializationSettings,
        onSelectNotification: (String? payload) async {
        if (payload != null) {
            debugPrint('notification payload: $payload');
        }
        // lakukan sesuatu dengan payload.
        // misal melakukan navigasi
        // ke sebuah halaman.
});

Fungsi untuk menampilkan notifikasi

Future<void> showForegroundServiceNotification(){
    const AndroidNotificationDetails androidPlatformChannelSpecifics =
        AndroidNotificationDetails('your channel id', 'your channel name',
            channelDescription: 'your channel description',
            importance: Importance.max,
            priority: Priority.high,
            ticker: 'ticker');
    await flutterLocalNotificationsPlugin
        .resolvePlatformSpecificImplementation<
            AndroidFlutterLocalNotificationsPlugin>()
        ?.startForegroundService(1, 'plain title', 'plain body',
            notificationDetails: androidPlatformChannelSpecifics,
            payload: 'item x');
}

Untuk mengupdate isi notifikasi cukup memanggil fungsi menampilkan notifikasi dengan isi yang berbeda.

Menghentikan Notifikasi

Future<void> _stopForegroundService() async {
await flutterLocalNotificationsPlugin
    .resolvePlatformSpecificImplementation<
        AndroidFlutterLocalNotificationsPlugin>()
    ?.stopForegroundService();
}