1. Service
1) 기능
- 백그라운드에서 미디어를 재생할 수 있는 기능
2) 빌드 프로세스
- 레이아웃 설정(버튼, 텍스트 등) > MainActivity에 버튼 구현 - 별도의 클래스 설정을 위한 파일 생성(ex. MusicService.java) > 서비스 시작, 초기화, 서비스 종료 선언 > 재생할 음악 리소스파일에 추가(raw 디렉토리 생성 후 파일 넣기, 전체 소문자, 특수문자와 띄어쓰기 포함 불가) > 직전단계에서 노래 불러오기 > AndroideManifest에 서비스 추가
3) 코드 예시
- 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:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="서비스 시작"/>
<Button
android:id="@+id/btn_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="서비스 종료"/>
</LinearLayout>
- MainActivity
package com.example.serviceexample;
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_start, btn_stop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_start = (Button)findViewById(R.id.btn_start);
btn_stop = (Button)findViewById(R.id.btn_stop);
btn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startService(new Intent(getApplicationContext(), MusicService.class));
}
});
btn_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(new Intent(getApplicationContext(), MusicService.class));
}
});
}
}
- MusicServic.java
package com.example.serviceexample;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import androidx.annotation.Nullable;
import java.security.Provider;
public class MusicService extends Service {
MediaPlayer mediaPlayer;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override // 서비스 시작
public void onCreate() {
super.onCreate();
// 음악파일 생성
mediaPlayer = MediaPlayer.create(this, R.raw.iceandfire); //노래파일 불러오기
mediaPlayer.setLooping(false); //반복 여부
}
@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();
}
}
- AndroidManifest(추가 위치 참고)
</activity>
<service android:name=".MusicService"/>
</application>
4) 강의 문제점
- 이전 카메라 불러오기 강의에서 엑세스 권한 받아오는 방식의 변화로 최근과 코드가 다름
- 메소드나 클래스가 마이그레이션 된 것은 아니라 큰 문제는 없어보이나 권한의 문제가 발생할 여지가 있어보임(확인 필요)
2. 참고 사이트
https://developer.android.com/reference/android/app/Service#WhatIsAService
'Development > Android Studio' 카테고리의 다른 글
(Android Studio) Chapter11. Spinner Dropdown (0) | 2023.03.05 |
---|---|
(Android Studio) Chapter10. FCM Push Message (0) | 2023.03.05 |
(Android Studio) Chapter8. Dialog pop-up (0) | 2023.03.04 |
(Android Studio) Chapter7. Log 출력, Thread & Handler (0) | 2023.03.01 |
(Android Studio) Chapter6. Fragment (0) | 2023.02.24 |