안드로이트폰 켤 때마다 자동으로 서비스가 실행되도록 만들기

2010. 3. 25. 18:34안드로이드 개발

검색 능력이 떨어진 것인지, 서비스 자동 실행과 관련된 예제를 못찾다가 개발 서적의 샘플 소스에서 찾았다. 같은 정보를 찾고 있는 분들께 조금이나마 도움이 되기를 바라며 정리해둔다.

먼저 메니페스트 파일을 열고 다음과 같이 액티비티 다음에 리시버와 서비스를 추가해준다.

<activity android:name=".MyApp"
     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=".MyServiceReceiver">
   <intent-filter>
      <action 
        android:name="android.intent.action.BOOT_COMPLETED" />

   </intent-filter>                     
</receiver>

<service android:name=".MyService" />

당연히 BOOT_COMPLETED 액션을 받을 수 있도록 퍼미션도 지정해준다.

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

MyServiceReceiver.java 파일을 만들고 다음 내용을 추가해준다. BOOT_COMPLETED 액션이 전달되면 서비스를 시작하도록 코딩한다.

public class MyServiceReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
  if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
  {

   context.startService(new Intent(context,MyService.class));
  }
 }
}

마지막으로 MyService.java 파일을 만들고 백그라운드로 동작되는 서비스의 기능을 구현해주면 된다. 액티비티와 바인딩은 안한다면 onBind에서는 null을 리턴해주면 된다. (바인딩에 대해서는 따로 포스팅하겠다.)

public class MyService extends Service {
    @Override
    public void onCreate() {
        Toast.makeText(getBaseContext(), "Start MyService",
                           Toast.LENGTH_SHORT).show();

       
    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
    }
    
    @Override
    public void onDestroy() {
        super.onDestroy();
    }
    
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

이렇게 만들어 놓으면, 안드로이드폰 전원을 켤 때마다 해당 서비스가 자동으로 스타트 되는 것을 확인할 수 있다.