Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 안드로이드 카카오 지도
- 컴포넌트
- android 지도
- 안드로이드광고
- android daum map
- component
- 클린 아키텍처
- 애드몹배너
- 젯팩컴포즈
- 파이어베이스
- RecyclerView
- Clean Architecture
- glide
- 안드로이드 라이브러리
- 안드로이드
- thread
- dynamiclink
- ImageView
- 동적 링크
- JetpackCompose
- HTTP
- 안드로이드컴포즈
- Android
- 다이나믹 링크
- 아키텍처
- Firebase
- Android 애드몹
- android kakao map
- 선언형UI
- 애드몹광고
Archives
- Today
- Total
코딩스토리
[Android/안드로이드] Service를 이용한 백그라운드 음악플레이어 기능 본문
음악 앱을 사용할 때는 앱을 실행했을 때 말고도 다른 앱을 실행하거나 휴대폰을 잠금화면으로 전환해도 음악이 재생되도록 구현되어있습니다. 이렇게 인터페이스가 없어도 백그라운드에서 실행되는 동작을 안드로이드에서는 Service(서비스)를 통해서 제공해줍니다.
우선 서비스를 구현하기 위한 기본적인 순서는 다음과 같습니다.
1. Service 클래스 생성
2. Androidmanifest.xml에 Service를 등록
3, Service를 시작하도록 호출
Service 클래스 생성
MusicService.java
package com.lakue.servicemusicsample;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import androidx.annotation.Nullable;
public class MusicService extends Service {
MediaPlayer mediaPlayer; //음악 재생을 위한 객체
@Nullable
@Override
public IBinder onBind(Intent intent) {
//Service객체와 Activity사이에서 통신을 할 때 사용되는 메서드
//데이터 전달이 필요 없으면 null
return null;
}
@Override
public void onCreate() {
//서비스에서 가장 먼저 호출(최초한번)
mediaPlayer = MediaPlayer.create(this, R.raw.music);
mediaPlayer.setLooping(false); // 반복재생
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//서비스가 실행될 때 실행
mediaPlayer.start(); //음악 시작
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
//서비스가 종료될 때 실행
mediaPlayer.stop(); //음악 종료
super.onDestroy();
}
}
R.raw.music부분에서 에러가 날 수 있는데, res에서 raw폴더를 생성 해 재생시킬 음악을 넣어준 뒤, 그에 맞는 파일명을 넣어주면 됩니다.
Androidmanifest.xml에 Service를 등록
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lakue.servicemusicsample">
<application
...
<activity android:name=".MainActivity">
...
</activity>
<service android:name=".MusicService" /> //서비스 등록
</application>
</manifest>
application 태그 안에 <service android:name=".MusicService" />를 통해 서비스를 등록해줍니다.
Service를 시작하도록 호출
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_music_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="음악 재생" />
<Button
android:id="@+id/btn_music_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="음악 종료" />
</LinearLayout>
우선 서비스를 실행 할 레이아웃을 만들어줍니다.
MainActivity.java
package com.lakue.servicemusicsample;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button btn_music_start, btn_music_stop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_music_start = findViewById(R.id.btn_music_start);
btn_music_stop = findViewById(R.id.btn_music_stop);
btn_music_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), MusicService.class);
startService(intent);
}
});
btn_music_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), MusicService.class);
stopService(intent);
}
});
}
}
음악 실행 버튼을 누르면 서비스를 실행하도록 하고, 음악종료 버튼을 누르면 서비스를 종료하도록 기능을 설정합니다.
이렇게 백그라운드에서도 음악이 재생될 수 있는 서비스를 구현해 보았습니다.
'Android > 유용한 기술' 카테고리의 다른 글
[Android/안드로이드] Firebase DynamicLink로 원하는 콘텐츠로 사용자 유입시키기[2] (0) | 2021.12.14 |
---|---|
[Android/안드로이드] Firebase DynamicLink로 원하는 콘텐츠로 사용자 유입시키기[1] (1) | 2021.12.09 |
[Android/안드로이드] View 최상단으로 올리기(BringToFront) (0) | 2020.09.22 |
[Android/android] Button 클릭 애니메이션 주기(Ripple Effect) (0) | 2020.09.21 |
[Android/안드로이드] Kakao 지도 API 연동/카카오 지도 API연동 (4) | 2020.09.15 |
Comments