Pada postingan kali ini saya akan menjelaskan tentang foreground service android di Kotlin. Kita akan melihat implementasi nyata dari layanan latar depan. Jadi mari kita mulai.
Pada tutorial Foreground Service sebelumnya , saya sudah menjelaskan tentang Foreground Service? dan keuntungan dari Layanan Foreground. Pada dasarnya artikel sebelumnya berbasis Java. Dalam tutorial aplikasi android ini, kita akan belajar bagaimana mengimplementasikan Kotlin.
Langkah-langkah implementasi Foreground Service
- Create and Project Setup
- Create a derived class of Service named is ForegroundService.kt
- Make Notification Channel
- Override methods
- onStartCommand
- mandatory
- onBind
- mandatory
- must return null
- onCreate
- optional to override
- call only once when Service is being created
- onDestory
- optional to override
- Call when background service is destroyed
- Declare your service and permission in AndroidManifest.xml
package com.foregroundservice
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.app.Service
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.IBinder
import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat
class ForegroundService : Service() {
private val CHANNEL_ID = "ForegroundService Kotlin"
companion object {
fun startService(context: Context, message: String) {
val startIntent = Intent(context, ForegroundService::class.java)
startIntent.putExtra("inputExtra", message)
ContextCompat.startForegroundService(context, startIntent)
}
fun stopService(context: Context) {
val stopIntent = Intent(context, ForegroundService::class.java)
context.stopService(stopIntent)
}
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
//do heavy work on a background thread
val input = intent?.getStringExtra("inputExtra")
createNotificationChannel()
val notificationIntent = Intent(this, MainActivity::class.java)
val pendingIntent = PendingIntent.getActivity(
this,
0, notificationIntent, 0
)
val notification = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Foreground Service Kotlin Example")
.setContentText(input)
.setSmallIcon(R.drawable.ic_notification)
.setContentIntent(pendingIntent)
.build()
startForeground(1, notification)
//stopSelf();
return START_NOT_STICKY
}
override fun onBind(intent: Intent): IBinder? {
return null
}
private fun createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val serviceChannel = NotificationChannel(CHANNEL_ID, "Foreground Service Channel",
NotificationManager.IMPORTANCE_DEFAULT)
val manager = getSystemService(NotificationManager::class.java)
manager!!.createNotificationChannel(serviceChannel)
}
}
}
Dalam file sumber ini, kami melakukan dua hal. pertama, kita membuat saluran notifikasi. Bagian kedua adalah memulai layanan latar depan, Jadi dibutuhkan dua parameter id dan instance notifikasi untuk menampilkan notifikasi.
Kalian tahu betul setelah android oreo memberlakukan beberapa implikasi pada layanan. Sesuai dengan tim Pengembang Android, Anda tidak dapat melakukan operasi yang berjalan lama di latar belakang tanpa memberi tahu pengguna. Bahwa kita melewati objek notifikasi di dalam metode startForeground().
Deklarasikan layanan dan izin Anda di AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.foregroundservice">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<service android:name=".ForegroundService">
</service>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
Mari kita buka file activity_main.xml. Saya membuat beberapa perubahan untuk menguji layanan latar depan.
<?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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/buttonStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="220dp"
android:background="@color/colorPrimary"
android:padding="8dp"
android:text="Start Service"
android:textColor="@color/colorWhite"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/buttonStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:background="@color/colorPrimary"
android:padding="8dp"
android:onClick="onStopServiceClick"
android:text="Stop Service"
android:textColor="@color/colorWhite"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/buttonStart"
app:layout_constraintVertical_bias="0.113"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
package com.foregroundservice
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.buttonStart
import kotlinx.android.synthetic.main.activity_main.buttonStop
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
buttonStart.setOnClickListener(View.OnClickListener {
ForegroundService.startService(this, "Foreground Service is running...")
})
buttonStop.setOnClickListener(View.OnClickListener {
ForegroundService.stopService(this)
})
}
}
Kesimpulan
Sekarang pekerjaan Anda selesai, Dalam posting ini, kita mempelajari implementasi layanan latar depan di Kotlin. Mari kita jalankan proyek, Anda mengklik tombol 'mulai layanan' daripada layanan akan dimulai, dan pemberitahuan akan muncul di bilah notifikasi. Notifikasi akan hilang setelah Anda mengklik tombol 'stop service'.
Sumber
https://androidwave.com/foreground-service-android-example-in-kotlin/