티스토리 뷰

개발을 진행하다보면 부팅시에 자동으로 앱 실행을 해야 하는 경우가 있습니다. 여기서 앱실행은 대부분 서비스(service)실행을 의미 합니다. 카카오톡과 매시저앱등에서 주로 사용 하며 지속적으로 백그라운드로 돌면서 정해진 역활을 수행 해야 하는데, 부팅이후이도 해당 서비스를 돌려야 하기 때문입니다.


안드로이드에서는 이렇게 부팅과 동시에 실행하는 경우에 사용 할 수 있는 방법을 제공 해주고 있습니다. 바로 "BOOT_COMPLETED"라는 Broadcast를 이용한 방법입니다.


안드로이드 OS에서는 부팅이 완료되면 "BOOT_COMPLETED" Broadcast를 전송 해줍니다. 앱에서는 BroadcastReceiver로 해당 Broadcast를 등록한 후 해당 Broadcast가 들어오면 이후 정해진 동작을 수행하도록 코딩을 해주면 됩니다.


BroadcastReceiver 파일


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class BootReceiver extends BroadcastReceiver {
 // BroadcastReceiver를 상속하여 처리 해줍니다.
 @Override
 public void onReceive(Context context, Intent intent) {
  // TODO Auto-generated method stub
  // 전달 받은 Broadcast의 값을 가져오기
  // androidmanifest.xml에 정의한 인텐트 필터를 받아 올 수 있습니다.
  String action = intent.getAction();
  // 전달된 값이 '부팅완료' 인 경우에만 동작 하도록 조건문을 설정 해줍니다.
  if (action.equals("android.intent.action.BOOT_COMPLETED")) {
   // TODO
   // 부팅 이후 처리해야 코드 작성
   // Ex.서비스 호출, 특정 액티비티 호출등등
  }
 }
}
cs


AndroidManifest.xml 
(11, 27~36 라인처럼 추가 해주시면 됩니다.)


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
32
33
34
35
36
37
38
39
 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.kanzler.bootapp"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="16" />
    
    <!-- 부팅을 확인 할수 있는 퍼미션 등록 -->    
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <receiver
            android:name=".BootReceiver"
            android:enabled="true"
            android:exported="false"
            android:label="BOOTReceiver">
            
            <intent-filter >
                <action android:name="android.intent.action.BOOT_COMPLETED"/>                
            </intent-filter>            
        </receiver>
        
    </application>
</manifest
cs


댓글