[안드로이드/Recevier] 시스템 메시지 (System Message)

2023. 4. 19. 23:07· Android
목차
  1. 시스템 메시지
반응형

시스템 메시지

  • 안드로이드는 단말기에서 사건이 발생할 경우 각 사건에 대해 정해진 메세지를 발생
  • 시스템 메세지 발생 -> 이에 반응하는 Broad Cast Recevier 동작
  • 개발자가 각 사건에 대한 이름으로 Broad Cast Recevier 를 등록하면 OS가 찾아서 동작시키는 방식
  • 안드 8.0 부터 사용할 수 있는 시스템 메시지 수 줄어들었음
  • 안드 8.0 이상도 시스템 메시지를 발생시키는 Broad Cast Recevier 는 Manifest에 이름을 등록하여 사용이 가능

* 아래 공식문서에 나와 있는 Broad Cast Recevier 들은 Manifest에 등록하여 암묵적으로 사용이 가능 (안드 8.0 이상이여도 가능)

https://developer.android.com/guide/components/broadcast-exceptions?hl=ko 

 

암시적 브로드캐스트 예외  |  Android 개발자  |  Android Developers

백그라운드 제한에서 제외되는 암시적 브로드캐스트입니다.

developer.android.com

아래 예제는 애뮬레이터를 재부팅 할 때와 메시지를 수신할 때 안드로이드 OS 내장 리시버를 등록해 동작시키는 예제이다.

하지만 내 애뮬레이터 환경에서는 재부팅이 잘 되지 않아 재부팅 예제는 재현할 수 없었다. ㅠ.ㅠ -> 부팅이 안 되는건 아닌 것 같은데 토스트 메시지가 잘 나타나지 않음.....딱 한 번 나타났었는데 그 이후로는 잘 안 나옴. 아예 안 나온다기 보다는 뭔가 이미 사라진 걸 수도?...

class TestReceiver : BroadcastReceiver() {

    // 안드 OS가 이 BroadcastReceiver를 실행하기 위해 찾으면 자동으로 호출되는 메서드
    override fun onReceive(context: Context, intent: Intent) {
        // This method is called when the BroadcastReceiver is receiving an Intent broadcast.
        // BR의 이름으로 분기
        when (intent.action) {
            "android.intent.action.BOOT_COMPLETED" -> {
                val ta = Toast.makeText(context,"부팅완료",Toast.LENGTH_SHORT)
                ta.show()
            }

            "android.provider.Telephony.SMS_RECEIVED" -> {  // 안드로이드 개발 지원 사이트 예제 코드
                // 문자 메세지를 추출해서 텍스트뷰에 출력
                if (intent.extras != null) {
                    val pduObject = intent.extras?.get("pdus") as Array<Any?>
                    if (pduObject != null) {
                        for (obj in pduObject) {
                            // 문자 메시지 양식 객체 추출
                            val format = intent.extras?.getString("format")
                            // 문자 메시지 객체 생성
                            val currentSMS = SmsMessage.createFromPdu(obj as ByteArray?, format) // 공식문서에서 지정한 예제 코드

                            // 메세지를 보낸 전화번호와 메시지 내용 출력
                            val showMessage = "전화번호 : ${currentSMS.displayOriginatingAddress}\n내용 : ${currentSMS.displayMessageBody}"
                            val t1 = Toast.makeText(context,showMessage,Toast.LENGTH_SHORT)
                            t1.show()
                        }

                    }

                }
            }
        }
    }
}

[* Manifest 에는 permssion 과 Receiver 이름을 추가해준다]

<uses-permission  android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <!--부팅 메세제 수신 권한 -->
<uses-permission  android:name="android.permission.READ_PHONE_STATE"/> <!-- 문자 메세제 수신 권한 -->
<uses-permission  android:name="android.permission.RECEIVE_SMS"/>

<application
	<receiver
    	android:name=".TestReceiver"
    	android:enabled="true"
    	android:exported="true">
    	<intent-filter>
        	<action android:name="android.intent.action.BOOT_COMPLETED" /> <!--부팅이 완료가 되면 OS가 이 이름으로 등록된 리시버를 찾아 동작 -->
    	</intent-filter>
    	<intent-filter>
        	<action android:name="android.provider.Telephony.SMS_RECEIVED" /> <!--부팅이 완료가 되면 OS가 이 이름으로 등록된 리시버를 찾아 동작 -->
    	</intent-filter>
	</receiver>
 </application>

 

애뮬레이터에서 가상으로 전화나 문자 메시지를 보낼 수 있다!!

반응형

'Android' 카테고리의 다른 글

[안드로이드/Service] IPC 란?  (0) 2023.04.20
[안드로이드/Service] Service(서비스) 란?  (0) 2023.04.20
[안드로이드/Recevier] BroadCastReceiver 란?  (0) 2023.04.17
[안드로이드/Thread] RunOnUiThread  (0) 2023.04.17
[안드로이드/Thread] Handler를 사용한 화면 처리  (0) 2023.04.17
  1. 시스템 메시지
'Android' 카테고리의 다른 글
  • [안드로이드/Service] IPC 란?
  • [안드로이드/Service] Service(서비스) 란?
  • [안드로이드/Recevier] BroadCastReceiver 란?
  • [안드로이드/Thread] RunOnUiThread
gangmini
gangmini
gangmini
게으른J 의 테크로그
gangmini
전체
오늘
어제
글쓰기방명록관리자
  • 분류 전체보기 (127)
    • 인공지능(AI) & 데이터 분석 (5)
    • Android (91)
      • Coroutine (3)
      • Compose (0)
      • 안드로이드 CS (0)
    • Kotlin (3)
    • Data Structure (0)
    • 알고리즘 (20)
      • 알고리즘 이론 (11)
      • 백준(BOJ) 문제 풀이 (9)
    • Build Tool (2)
    • Git (2)
    • 일본어 (0)
    • 기타(취준, 활동) (0)


인기 글



최근 댓글



최근 글

hELLO · Designed By 정상우.v4.2.2
gangmini
[안드로이드/Recevier] 시스템 메시지 (System Message)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.