Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions .idea/.name

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/AndroidProjectSystem.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 18 additions & 0 deletions .idea/deploymentTargetSelector.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions .idea/deviceManager.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/markdown.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions .idea/migrations.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions .idea/runConfigurations.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

63 changes: 63 additions & 0 deletions DevLog.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
음악 플레이어 실습

기기의 음악을 MediaStore로 읽어 RecyclerView로 리스팅
화면 하단에 재생중인 음악을 표시할 UI 구현
권한 취득, 실패시 알림과 설정으로 가는 버튼 생성 -> 프래그먼트 교체로 구현
RecyclerView의 버튼들에 음악 재생 기능을 구현
지워지지 않는 알림 띄우기

1. AndroidManifest.xml에 권한 선언
2. MainActivity 레이아웃 구성
3. 권한 요청 구현
4. MediaStore 데이터 조회 및 RecyclerView 구현
5. 포그라운드 서비스 클래스 생성
6. 알림채널 및 알림 생성
7. MediaPlayer 초기화 및 제어 코드 작성
8. RecyclerView 아이템 클릭 이벤트 연결
9. 화면 하단 미니 플레이어 UI 연동

MusicService.kt
onBind
바운드 서비스가 아니므로 null
onCreate
알림 채널 등록 함수 실행
onStartCommand
포그라운드/백그라운드 명령 처리
playMusic
MediaPlayer 메모리 및 실행 처리
stopMusic
메모리 처리
createNotification
알림객체 생성용, intent 설정
createNotificationChannel
알림채널 구축
onDestroy
음악 리소스 해제

MusicAdapter.kt
onCreateViewHolder
뷰바인딩-뷰홀더 생성
onBindViewHolder
뷰바인딩 설정 및 콜백함수 호출
getItemCount
뷰 크기 반환용

MainActivity.kt
onCreate
뷰바인딩 초기화, 권한체크
onResume
권한 상태 확인 및 UI 갱신
checkMusicPermission
이름그대로
setupMusicPlayer
UI갱신 및 리사이클러뷰 초기화, 어댑터 연결, 알림 권한 체크
checkNotificationPermission
이름그대로
showPermissionDeniedUI
이름그대로
loadMusicFiles
ContentResolver와 MediaStore 사용
startMusicService
음악 정보를 인텐트에 담아 서비스 포그라운드로 실행
updateBottomPlayer
이름그대로
3 changes: 3 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ android {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
buildFeatures {
viewBinding = true
}
}

dependencies {
Expand Down
12 changes: 10 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"
tools:ignore="ForegroundServicesPolicy" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

<application
android:allowBackup="true"
Expand All @@ -19,7 +24,10 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>


<service
android:name=".MusicService"
android:foregroundServiceType="mediaPlayback"
android:exported="false" />
</application>
</manifest>
Loading