살구월드

잠깐, 리눅스, C 언어, Java, Python 등
각종 예제 검색하기

안드로이드 관련 포스팅 목록

2020/07/07 - [Android] - 안드로이드 서비스 등록/실행(Service Intent)

2020/07/06 - [Android] - 안드로이드 WIFI 연결 상태 확인(Android Wifi, Connected)

2020/06/23 - [Android] - 안드로이드 버튼 클릭 이벤트 처리 예제 - 3

2020/06/23 - [Android] - 안드로이드 버튼 클릭 이벤트 처리 예제 - 2

2020/06/22 - [Android] - 안드로이드 버튼 클릭 이벤트 처리 예제 - 1

2020/06/21 - [Android] - 안드로이드 타이틀바 제거

 

 


목차

 

 

     

     

    API의 필요성

    안녕하세요. 오늘은 이전 포스팅에서 소개했던 안드로이드 서비스 실행 방법에 이어서 서비스를 안드로이드 핸드폰이 부팅될 때 자동 실행되도록 하는 방법에 대하여 알아보겠습니다. 만약 서비스 구성 방법이나 실행 방법에 대해 잘 모르는 상태라면 아래 링크를 타고 이전 서비스 실행 방법을 먼저 읽고 진행하는 것을 추천드리겠습니다.

    2020/07/07 - [Android] - 안드로이드 서비스 등록/실행(Service Intent)

     

    부팅시 서비스가 구동되야하는 이유는 여러가지 있습니다. 예를들어 카카오톡 앱의 경우 상대방이 전송한 채팅 내용을 듣고 우리에게 표시하기 위해서 매 순간 켜져 있어야 합니다. 따라서 서비스를 핸드폰이 부팅되면 바로 실행되야할 필요성이 있습니다.

    이는 예전과 마찬가지로 백그라운드 처리라고 하며 언제 어떤 이벤트가 발생하더라도 항상 들을 수 있는 준비가되어있는 프로그램을 의미합니다.

    5분 대기조

     

    마치 군대에서 5분 대기조가 편성되듯이 컴퓨터 세상에서도 이런 목적으로 있는 프로그램들이 있는 것이지요. 부팅시 서비스를 실행시키는 방법 자체는 간단합니다. 

     

     

     

     

    권한 설정

    부팅 완료 알림 받을 수 있도록 앱에 권한 설정

    ...
    <users-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    
    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
    ...
    ...
    </application>

     

    위의 권한은 안드로이드 핸드폰이 부팅되었을 때 부팅이 완료되었다고 알림을 받을 수 있도록 권한 설정하는 부분입니다. 프로젝트의 AndroidManifest.xml의 <application> 태그 위에 선언합니다.

     

     

     

     

    부팅 완료 알림 수신시 서비스 실행하도록 하는 리시버 등록

    ...
    </activity>
    
    <receiver
    	android:name = ".BootReceiver"
    	android:enabled = "true">
    	<intent-filter>
    		<action android:name="android.intent.action.BOOT_COMPLETED" />
    	</intent-filter>
    </receiver>
    ...

    이제 부팅이 완료되었다는 알림을 수신하는 리시버를 등록해줍니다. 코드상에서 등록하지 않고 AndroidManifest.xml에 리시버를 등록합니다. 등록 <Activity> 태그 아래에 선언합니다.

     

     

     

     

    리시버 구현

    public class BootReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
                Intent tempService = new Intent(context, TempService.class);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    context.startForegroundService(tempService);
                } else {
                    context.startService(tempService);
                }
            }
        }
    }

     

    위와 같이 MainActivity.java 소스코드와 동일한 레벨의 위치에 BootReceiver.java 브로드 캐스트 리시버 클래스를 생성합니다. 사전에 AndroidManifest.xml에 부팅될 때 알림을 수신 받을 수 있도록 권한 설정을 하였기 때문에 부팅이 완료되면 이 리시버에 알림시 수신됩니다.

    이때 "android.intent.action.BOOT_COMPLETED" 액션인지 아닌지 구분하여 우리가 이전 포스팅에서 진행했던 것처럼 서비스를 실행시키는 구문을 추가합니다.

     

     

    마무리

    이번 포스팅에서는 안드로이드 환경에서 서비스가 핸드폰이 부팅될 때 자동으로 시작하도록 하는 방법을 알아보았습니다.

    잠깐, 리눅스, C 언어, Java, Python 등
    각종 예제 검색하기

    공유하기

    facebook twitter kakaoTalk kakaostory naver band