안드로이드 서비스
package com.monosoft.androidservice
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.ServiceConnection
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.IBinder
import android.view.View
class MainActivity : AppCompatActivity() {
lateinit var serviceIntent:Intent //초기화 필요없고 나중에 초기화를 쓸거다
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//서비스 클래스 담아준다.
serviceIntent = Intent(this,MyService::class.java)
//서비스 : 화면이 없는 액티비티
//액티비티랑 서비스랑 동시에 띄우면 양쪽의 코드를 동시를 실행시키면
//한쪽의 코드가 끝난 다음에 다른쪽 코드가 실행됨
//예를 들어 액티비티 코드가 끝나면 서비스 코드가 실행됨
//반대로 하면 반대로 순서로..
//왜냐 메인 스레드에서 실행하기 때문에
//만약에 백그라운드에서 실행시킬려면 스레드를 하나 생성해서 처리를 해야됨
}
fun serviceStart(view : View) {
serviceIntent.action = MyService.ACTION_CREATE
//안드로이드에다가 알려준다.
startService(intent)
}
fun serviceStop(view:View) {
stopService(intent)
}
var myService:MyService? = null
//var , val 변할수 있는 값 없는값 구분
var isService = false
val connection = object : ServiceConnection {
override fun onServiceConnected(p0: ComponentName?, iBinder: IBinder?) {
isService = true
//연결되는 순간 onBind에 코딩한 MYbinde를 파라메타로 넣어줌
val binder = iBinder as MyService.MyBinder
myService = binder.getService()
}
override fun onServiceDisconnected(p0: ComponentName?) {
isService = false
}
}
fun serviceBind(view:View) {
bindService(intent,connection,Context.BIND_AUTO_CREATE)
}
fun serviceCommand() {
myService?.create()
myService?.delete()
}
fun serviceUnBind(view:View) {
}
}
package com.monosoft.androidservice
import android.app.Service
import android.content.Intent
import android.os.Binder
import android.os.IBinder
import android.util.Log
class MyService : Service() {
companion object { //서비스안에 명령어를 액티비티에서 직접 접근 가능함
val ACTION_CREATE = "create"
val ACTION_DELETE = "delete"
}
//서비를 가져다 쓸수있게 해주는것
inner class MyBinder : Binder() {
fun getService() :MyService {
return this@MyService
}
}
override fun onBind(intent: Intent): IBinder {
return MyBinder()
}
//시작 시 동작
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
val action = intent?.action
when(action) {
ACTION_CREATE -> create()
ACTION_DELETE -> delete()
}
return super.onStartCommand(intent, flags, startId)
}
fun create() {
Log.d("서비스","create()가 호출됨")
}
fun delete() {
Log.d("서비스","delete()가 호출됨")
}
}
'Kotlin > Kotlin 팁' 카테고리의 다른 글
안드로이드 구글 API 맵 사용 (0) | 2020.10.19 |
---|---|
안드로이드 포어그라운드 사용 (0) | 2020.10.15 |
Android 스레드와 루퍼 타이머 앱 만들기 (0) | 2020.10.12 |
Android 카메라 사용 방법 - 갤러리 추가 (0) | 2020.10.08 |
Android 카메라 사용 방법 (0) | 2020.10.06 |
댓글