آموزش Service در کاتلین
سلام دوستان عزیز در این سری از آموزش برنامه نویسی اندروید به آموزش Service در کاتلین (kotlin) می پردازیم از سرویس بیشتر به منظور انجام کار خاصی در background نرم افزار استفاده می شود و تنها به این محدود نمی شود کارهای خاص دیگر نیز می توان با سرویس (service) انجام داد در ادامه با ما همراه باشید تا نحوه پیاده سازی آموزش Service در کاتلین را یاد گیرید.
کاربرد های سرویس در برنامه نویسی اندروید
- location listener
- API, provide services to other apps
- sound module
- in app billing
- Communication with webservices
بای پیاده سازی سرویس 3 کار باید انجام شود
ابتدا تعریف سرویس
تعریف سرویس در androidmanifest
و در نهایت اجرای سرویس
import android.app.Service
import android.content.Intent
import android.os.Handler
import android.os.IBinder
import java.util.*
class RandomNumberService : Service() {
private lateinit var mHandler: Handler
private lateinit var mRunnable: Runnable
override fun onBind(intent: Intent): IBinder? {
throw UnsupportedOperationException("Not yet implemented")
}
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
toast("Service started.")
mHandler = Handler()
mRunnable = Runnable { showRandomNumber() }
mHandler.postDelayed(mRunnable, 5000)
return Service.START_STICKY
}
override fun onDestroy() {
super.onDestroy()
toast("Service destroyed.")
mHandler.removeCallbacks(mRunnable)
}
private fun showRandomNumber() {
val rand = Random()
val number = rand.nextInt(100)
toast("Random Number : $number")
mHandler.postDelayed(mRunnable, 5000)
}
}
کلاس بالا یک سرویس ایجاد می کند تا یک عدد رندوم را در هربار اجرا ایجاد کند و آن عدد را Toast می کند. onBind و onStartCommand متدهای خود سرویس هستن که ما کارهایی که می خواهیم انجام دهیم را در onStartCommand قرار می دهیم.
بعد از اینکه کلاس بالا را ایجاد کردید وارد AndroidManifest.xml شده و خط های زیر را در تگ application اضافه کنید.
<service
android:name=".RandomNumberService"
android:enabled="true"
android:exported="true"
/>
در صورتی که اضافه نکنید سرویس کار نخواهد کرد.
بعد از اینکار در لایه activity_main.xml کدهای زیر را قرار دهید.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#7b917b"
android:orientation="vertical"
android:padding="16dp"
>
<Button
android:id="@+id/button_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Service"
/>
<Button
android:id="@+id/button_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stop Service"
/>
<Button
android:id="@+id/button_stats"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Service Stats"
/>
</LinearLayout>
در لایه بالا سه تا دکمه قرار دادیم که هرکدام یک Action خواهند داشت.
و در MainActivity.kt هم کدهای زیر را قرار می دهیم.
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import android.app.ActivityManager
import android.content.Context
import android.widget.Toast
import android.content.Intent
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Variable to hold service class name
val serviceClass = RandomNumberService::class.java
// Initialize a new Intent instance
val intent = Intent(applicationContext, serviceClass)
// Button to start the service
button_start.setOnClickListener{
// If the service is not running then start it
if (!isServiceRunning(serviceClass)) {
// Start the service
startService(intent)
} else {
toast("Service already running.")
}
}
// Button to stop the service
button_stop.setOnClickListener{
// If the service is not running then start it
if (isServiceRunning(serviceClass)) {
// Stop the service
stopService(intent)
} else {
toast("Service already stopped.")
}
}
// Get the service status
button_stats.setOnClickListener{
if (isServiceRunning(serviceClass)) {
toast("Service is running.")
} else {
toast("Service is stopped.")
}
}
}
// Custom method to determine whether a service is running
private fun isServiceRunning(serviceClass: Class<*>): Boolean {
val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
// Loop through the running services
for (service in activityManager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.name == service.service.className) {
// If the service is running then return true
return true
}
}
return false
}
}
// Extension function to show toast message
fun Context.toast(message:String){
Toast.makeText(applicationContext,message,Toast.LENGTH_SHORT).show()
}
در واقع با دکمه هایی که قرار دادیم سرویس را
- اجرا
- متوقف
- دریافت عدد رندوم
پیش نمایش اپلیکیشن بالا هم در ادامه می توانید مشاهده کنید.

موفق و پیروز باشید.
آموزش برنامه نویسی اندروید |