Android

java.lang.IllegalStateException: Not allowed to start service Intent

Caused by java.lang.IllegalStateException
Not allowed to start service Intent { cmp=agement/.common.ServiceWidget }: app is in background uid UidRecord{df6ce0d u0a454 RCVR idle change:uncached procs:1 seq(0,0,0)}
android.app.ContextImpl.startServiceCommon (ContextImpl.java:1602)
android.app.ContextImpl.startService (ContextImpl.java:1557)
android.content.ContextWrapper.startService (ContextWrapper.java:664)
android.content.ContextWrapper.startService (ContextWrapper.java:664)
ddolcatmaster.mypowermanagement.BatteryWidget.onReceive (Unknown Source:56)
android.app.ActivityThread.handleReceiver (ActivityThread.java:3416)
android.app.ActivityThread.access$1200 (ActivityThread.java:204)
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1669)
android.os.Handler.dispatchMessage (Handler.java:106)
android.os.Looper.loop (Looper.java:193)
android.app.ActivityThread.main (ActivityThread.java:6853)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:860)

위젯을 만들었는데, 휴대폰 부팅시 서비스 시작 오류가 발생하였다.

원인은 안드로이드 오레오( sdk 26) 버전부터는 휴대폰 부팅시 startService 메서드를 사용할 수 없다.

해결방법

안드로이드 오레오( sdk 26) 버전부터는 startForegroundService 메서드를 사용해야한다.

Intent sintent = new Intent(context, ServiceForBatteryWidget.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//api level 26
context.startForegroundService(sintent);
}else{
context.startService(sintent);
}

서비스 클래스에서 onCreate() 내에 다음 코드를 적용해주세요. 그렇지않으면 위젯 UPDATE가 되지않아요

@Override
public void onCreate() {
super.onCreate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//api level 26
startForeground(1,new Notification()); //
}else{
//startForeground(1,new Notification()); //상단에 고정이 되므로 미노출 처리한다.
}

}

Leave a Reply

error: Content is protected !!