Search

강현구 멘토링 신청

분류
안드로이드
질문
담당멘토
정민지
멘토링 요청시간
멘토링 시간
2023/07/05 20:00-21:30
멘토링방
멘토링룸2
배정상태
해결완료
비용지급
지급완료
번호
0
신청팀
개인
소요시간
1.5
작성자
강현구

질문

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를 저장하는 방법을 찾았습니다.