알람기능이 들어간 앱을 만들경우에, 전화를 하고 있다면,
알람소리를 잠시 멈추었다가 통화가 끝나면 다시 재생해주는 등의 처리를 해주어야 합니다.
이러한 처리를 하기 위해서는 사용자가 전화를 받고 있다는 것을 알아야 하는데요.
이를 위해서 TelephonyManager와 PhoneStateListener가 필요한 데요.
오늘은 이들을 이용해서 대응하는 방법에 대해서 정리해 보도록 하겠습니다.
1. TelephonyManager
그리고 전화와 관련된 정보를 얻을 때는 Manifest에서 permission을 얻는다고 명시해주어야 하는데요
이 TelephonyManager를 통해서 폰의 전화상태를 얻어올 수 있는데요.
getCallState() 메소드를 통해서 가능합니다.
잠시 이 메소드의 소스코드를 보고 가겠습니다.
전화상태에는 크게 세가지가 있다는 것을 알 수 있는데요.
- CALL_STATE_IDLE
- CALL_STATE_RINGING
- CALL_STATE_OFFHOOK
이제 위에서 얻은, 전화상태가 변화게 되었을 때, 그 정보를 얻어보도록 하겠습니다.
예상할 수 있듯이, listener를 사용해야 합니다.
여기서 사용하는 Listener가 PhoneStateListener인데요.
먼저 객체를 생성해주고, 원하는 상태의 변화를 듣게되면(listen하게 되면) 해주어야할 액션을,
해당 상태를 나타내는 메소드에서 override해주면 됩니다.
저희는 전화를 하고 있는 상태인지를 듣고싶으므로, onCallStateChanged를 override 해주면 됩니다.
따라서 CALL_STATE_RINGING상태가 되었을 때,
mediaPlayer의 getCurrentPosition메소드를 위해 현재 위치를 저장한 다음,
CALL_STATE_IDLE에서, seekTo메소드를 통해서 멈춘지점으로 이동후에,
mediaPlayer.start()로 다시 재생해 주면 되는 것이겠지요.
3. 리스너 등록하기
이제 위에서 만든 PhoneStateListener를 등록해서 사용을 해야 할 텐데요.
아래와 같이 해주면 됩니다.
또한 이 리스너 등록을 해지해 주기 위해서는 아래와 같이 하면 되구요.
이렇게 해서, TelephonyManager와 PhoneStateListener 를 통해서
전화 상태가 변경되었을 때 대응하는 방법에 대해서 정리해 보았습니다.
'Android 개발 > Android' 카테고리의 다른 글
안드로이드 Build 속도를 개선하는 방법 (0) | 2019.09.24 |
---|---|
PendingIntent 의 Flag 사용할 때 주의할 점 (0) | 2019.08.28 |
BuildConfig 와 ProductFlavor 정리 # BuildTypes BuildConfigField (0) | 2019.08.13 |
멀티덱스 적용없이 디버그를 위한 Proguard(프로가드) 설정 방법 (0) | 2019.07.26 |
AndroidX 로 SupportLibrary 마이그레이션(Migration) 하기 (0) | 2019.07.15 |
Notification Channel (알림 채널) 생성해서 적용하는 방법 (0) | 2019.06.12 |
안드로이드 스튜디오3에서 Gradle Sync 이슈 해결하기 (0) | 2018.08.20 |
Android XML에서 Custom Font 사용하기(SupportLibrary26 이상) (0) | 2017.10.31 |
ViewPager 페이지 전환시, 추상클래스 또는 Interface로 Refresh구현하기 (0) | 2017.08.04 |
WeakReference <약한 참조> 에 대해서 정리해보자 (0) | 2017.06.30 |
댓글