آموزش Service در کاتلین
سلام دوستان عزیز در این سری از آموزش برنامه نویسی اندروید به آموزش Service در کاتلین (kotlin) می پردازیم از سرویس بیشتر به منظور انجام کار خاصی در background نرم افزار استفاده می شود و تنها به این محدود نمی شود کارهای خاص دیگر نیز می توان با سرویس (service) انجام داد در ادامه با ما همراه باشید تا نحوه پیاده سازی آموزش Service در کاتلین را یاد گیرید.
کاربرد های سرویس در برنامه نویسی اندروید
- location listener
- API, provide services to other apps
- sound module
- in app billing
- Communication with webservices
بای پیاده سازی سرویس 3 کار باید انجام شود
ابتدا تعریف سرویس
تعریف سرویس در androidmanifest
و در نهایت اجرای سرویس
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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 اضافه کنید.
1 2 3 4 5 | <service android:name=".RandomNumberService" android:enabled="true" android:exported="true" /> |
در صورتی که اضافه نکنید سرویس کار نخواهد کرد.
بعد از اینکار در لایه activity_main.xml کدهای زیر را قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?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 هم کدهای زیر را قرار می دهیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | 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() } |
در واقع با دکمه هایی که قرار دادیم سرویس را
- اجرا
- متوقف
- دریافت عدد رندوم
پیش نمایش اپلیکیشن بالا هم در ادامه می توانید مشاهده کنید.
موفق و پیروز باشید.