728x90
반응형

Notification Player

notification player를 한국어로 뭐라고 할지 모르겠어서 그대로 쓴다

아래 사진처럼 알림창에서 조작할 수 있는 음악플레이어를 만들어서 bgm 재생에 사용할 예정이다.

 

아래 영상 두개를 따라하면서 만들었다

다만 MainActivity가 아닌 WidgetSerivce에서 코드를 작성하여 FloatingWidget에서 음악을 재생하도록 했다

또한 if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O)는 다 빼버렸다 (왜인지 이거 넣으면 안됨...)

https://www.youtube.com/watch?v=D-UsLR-cdwg&t=454s

https://www.youtube.com/watch?v=rRoHBWKQoRE&t=624s 

 

완성샷

다만 컴퓨터쪽 문제인지 Large Icon이 제대로 표시되지 않는 문제가 있었다.

실제 스마트폰에서는 잘 나온다

 

 

bgm 재생

사실 위의 알림을 구현하기가 어려웠지 bgm 재생은 꽤나 간단하다

 

먼저 res/raw에 각각의 mp3파일을 넣어준다

 

아래 코드는 음악을 재생할 MedaiPlayer을 만든다.

MediaPlayer m;

m = MediaPlayer.create(this, R.raw.vitality);

 

다음은 onTrack... 함수들에 음악을 재생/중지하거나 음악을 바꾸는 코드를 추가한다

 @Override
    public void onTrackPrevious() {
        position--;
        CreateNotification.createNotification(WidgetService.this, tracks.get(position), R.drawable.ic_baseline_pause_24, position, tracks.size() -1);
        SelectMusic(tracks.get(position).getTitle()); #추가
    }

    @Override
    public void onTrackPlay() {
        CreateNotification.createNotification(WidgetService.this, tracks.get(position), R.drawable.ic_baseline_pause_24, position, tracks.size() -1);
        isPlaying = true;
        m.start(); #추가
    }

    @Override
    public void onTrackPause() {
        CreateNotification.createNotification(WidgetService.this, tracks.get(position), R.drawable.ic_baseline_play_arrow_24, position, tracks.size() - 1);
        isPlaying = false;
        m.pause(); #추가
    }

    @Override
    public void onTrackNext() {
        position++;
        CreateNotification.createNotification(WidgetService.this, tracks.get(position), R.drawable.ic_baseline_pause_24, position, tracks.size() -1);
        SelectMusic(tracks.get(position).getTitle()); #추가
    }

 

SelectMusic함수는 아래와 같다

void SelectMusic(String title)
    {
        Log.e("text", title);
        switch(title)
        {
            case "vitality":
                m.stop();
                m.reset();
                m.release();
                m = MediaPlayer.create(this, R.raw.vitality);
                m.start();
                break;
            case "epitomize":
                m.stop();
                m.reset();
                m.release();
                m = MediaPlayer.create(this, R.raw.epitomize);
                m.start();
                break;
            case "luminescent":
                m.stop();
                m.reset();
                m.release();
                m = MediaPlayer.create(this, R.raw.luminescent);
                m.start();
                break;
            case "apropos":
                m.stop();
                m.reset();
                m.release();
                m = MediaPlayer.create(this, R.raw.apropos);
                m.start();
                break;
        }
    }

NotificationPlayer에서의 동작에 따라 음악 재생/중지, 음악 변경 코드다

함수 이름이 직관적이라 딱히 설명은 필요없을 듯 하다

 

전체 코드는 깃허브에서 확인가능하다

https://github.com/richardlee-kr/HelltakerM

 

richardlee-kr/HelltakerM

Helltaker Sticker Mobile. Contribute to richardlee-kr/HelltakerM development by creating an account on GitHub.

github.com

 

이제 원래 계획했던 기본적인 기능은 구현이 되었기 때문에 beta버전 앱을 만들어서 배포하고

UI나 여러가지 기능들을 추가해서 제대로 마무리할 예정이다.