마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 키 이벤트..

0 추천
MainActivity에서 특정 리모컨 값이 keyDown 으로 들어왔을 때 1번 작업을 수행 하게 했습니다.

MainActivity에서 A.Dialog 화면 으로 이동 했을 때 에도 특정 리모컨 값이 들어오면 1번 작업을 수행 하고 싶습니다.

문제는 Dialog 가 1개 라면 특정 리모컨 값이 들어왔을 때 1번 작업을 수행하는 코드를  MainActivity에 있는 것을 그대로 복사해서  A.Dialog에 붙이면 되는데, Dialog가 굉장히 많기 때문에 복붙 하는 작업은 비효율 적이라고 생각합니다.

어떻게 하면 Main 또는 Dialog 구분 없이 특정 리모콘 값이 입력되면 1번 작업을 수행하는 코드를 1곳에서 처리하도록 하고싶은데, 어떻게 시작을 해야하는지 모르겠습니다.

조금이라고 방향성을 잡을수 있도록 도와주세요ㅠㅠㅠ
개미1 (1,300 포인트) 님이 11월 4일 질문

2개의 답변

0 추천
싱글턴 패턴을 검색해보시면 될거 같습니다. 간단하니 한번 적용해보세요
rhaps20 (6,110 포인트) 님이 11월 5일 답변
0 추천

제일 먼저 시도해 볼 수 있는 것은 Activity의 dispatchKeyEvent를 이용해 처리하는 겁니다.
 

override fun dispatchKeyEvent(event: KeyEvent): Boolean {
    if (event.action == KeyEvent.ACTION_DOWN) {
        when (event.keyCode) {
            KeyEvent.KEYCODE_YOUR_REMOTE_BUTTON -> {
                performCommonAction()
                return true
            }
        }
    }
    return super.dispatchKeyEvent(event)
}

액티비티가 여러개라면 BaseActivity 를 만들어서 상속을 받도록 하시면 될 것 같습니다.

다른 접근 방법으로는 BroadcastReceiver를 이용하여 리모트 콘트롤의 입력값이 들어오는 걸 처리할 수 있을 것 같습니다.
 

class RemoteControlReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        val action = intent.action
        if (action == "com.example.ACTION_REMOTE_BUTTON") {
            performCommonAction(context)
        }
    }

    private fun performCommonAction(context: Context) {
        Toast.makeText(context, "Remote button pressed!", Toast.LENGTH_SHORT).show()
    }
}

 

spark (230,130 포인트) 님이 11월 5일 답변
...