728x90
서비스 백그라운드에서 돌아가는 프로세스 (Oncreate (MainActivity에서 어떤 작업하고 있을 때) 다른 작업을 처리해 줄 때 사용)
핸들러와 스레드와 비슷
Oncreate는 activity와 같이 서비스 존재
Ctrl+o로 onCreate (서비스가 시작될 때 초기화) , onDestroy(서비스가 끝났을 때) 생성
onStartCommand는 시작
초기화(onCreate)->시작(onStartCommand)->종료(onDestroy)
MediaPlayer mediaPlayer는 음악 트는 거
res에서 우클릭 후 새로운 폴더 만들기
raw가 보통 음악 담는 폴더
소문자만 들어가야 함 띄어쓰기도 안 되는 듯
Manifest </activity> </application> 사이에
<service android:name=".MusicService"/>
구문 추가
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: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_main.java
package com.example.serviceexample;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
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;
@SuppressLint("MissingInflatedId")
@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));
}
});
}
}
MusicService.java
package com.example.serviceexample;
import android.app.Service;
import android.content.Intent;
import android.media.MediaParser;
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) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mediaPlayer = MediaPlayer.create(this, R.raw.minivandals); //음악 파일 생성
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() {
super.onDestroy();
mediaPlayer.stop();
}
}
결과

메인 화면에 서비스 시작과 서비스 종료 버튼이 시작되는데, 서비스 시작 버튼을 누르면 음악이 재생되고 이는 앱 밖으로 나간 상황에서도 적용된다. 서비스 종료 버튼을 누르면 음악 재생이 멈춘다.
728x90
'[Android Studio] (Java)' 카테고리의 다른 글
| [Android Studio] (뒤로 가기 두 번 눌러 앱 종료) (0) | 2023.08.31 |
|---|---|
| [Android Studio] (Spinner 드롭 다운) (0) | 2023.08.29 |
| [Android Studio] (Dialog 다이얼로그 팝업창) (0) | 2023.08.28 |
| [Android Stuido] (Thread&Handler 사용법) (0) | 2023.08.28 |
| [Android Studio] (Log출력 및 주석 다는 법) (0) | 2023.08.27 |