질문
1.
Broadcast Receiver 질문:
안드로이드 4대 컴포넌트 중 Broadcast Receiver를 유연하게 사용하고 싶은데 감이 잡히지 않습니다. 예를 들면 휴대폰이 부팅되는 이벤트를 받는 리시버를 구현한다고 가정했을 때 휴대폰이 부팅되었다는 이벤트를 수신하지 못하는 오류를 겪고 있으며 브로드캐스트의 onReceive()메서드의 메인 스레드 내부 동작 원리에 궁금한 점이 존재합니다.
2.
파일 입출력 질문 :
어플리케이션 내부 저장소에 객체를 파일로 저장하고 읽는 과정 에서 객체를 두 개 이상 저장되고 while문을 이용해 파일 읽기(예외 처리를 통한 파일 내부 객체 순회)를 시도하였을 때 상위 객체 하나만 읽히는 문제를 직면했습니다.
화면캡쳐(예시)
브로드 캐스트 문제의 부분
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<receiver
android:name=".testReceiver2"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
XML
복사
브로드 캐스트 문제의 부분2
class testReceiver2 : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
// BR를 등록했을 때 사용한 이름을 가져온다
when(intent.action){
//부팅완료
"android.intent.action.BOOT_COMPLETED"->{
showToast(context, "핸드폰이 재부팅되었습니다.")
}
}
private fun showToast(context: Context, message: String) {
Handler(Looper.getMainLooper()).post {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
}
}
}
Kotlin
복사
멘토 답변
질문1 (1시간 소요)
•
Broadcast Receiver와 Service에 대해 알아보았습니다
•
Android 10(API 레벨 29)부터 백그라운드 작업에 대하여 Service를 사용해 한다는 점을 설명하고 함께 코드를 수정했습니다
질문2 (30분 소요)
•
파일 입출력 로직에서 에러가 나던 부분을 함께 찾았습니다.
◦
readLine()을 사용하는 방법으로 문제를 해결했습니다.
◦
writeObject() 함수를 사용하기 위해 List를 저장하는 방법을 찾았습니다.