본문 바로가기
Study/Android

Android 8이상에서 재부팅시 서비스 시작하기(안될때)

by Answer Choi 2019. 4. 5.
반응형

Android 8 이전에는 broadcast Receiver에서 service를 호출할때

 

context.startService(new Intent(context, callService.class));

 

위의 코드로 호출을 하였습니다.

 

하지만 Android 8부터는 startService가 아닌 startForegroundService를 사용하여야 합니다.

 

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
	context.startForegroundService(i);
} else {
    context.startService(i);
}

 

따라서 위의 부분만 코드를 수정해 주시면됩니다.

 

참고로 manifests의 권한입니다.

 

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

 

manifests의 application부분입니다.

 

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

<receiver android:name=".broad" android:exported="false" android:enabled="true">
	<intent-filter>
	    <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

 

스마트폰이 재부팅 될 때 broad라는 broadcast receiver를 호출하여 callService라는 서비스를 호출합니다.

 

public class broad extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {               	
        Intent i = new Intent(context, callService.class);
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        	context.startForegroundService(i);
        } else {
            context.startService(i);
        }
    }
}

 

재부팅이 되고나면 위의 broadcastReceiver가 호출이 되고,

 

callService라는 서비스 클래스가 실행됩니다.

반응형

인기글