Android

[백그라운드 서비스]Bad notification for startForeground: [java.lang.RuntimeException: invalid channel for service notification

android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=null pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x40 color=0x00000000 backgroundColor=0x00000000 vis=PRIVATE)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1745)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6853)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860)
2019-10-31 20:02:36.128 18834-18834/ E/UncaughtException: android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=null pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x40 color=0x00000000 backgroundColor=0x00000000 vis=PRIVATE)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1745)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6853)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860)

[원인 코드]
@Override
public void onCreate() {
super.onCreate();

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

[해결책]
안드로이드 9 (파이) 부터는 백그라운드서비스에서 startForeground(2,new Notification()); 방식으로 Noti를 할 수 없다.

채널을 지정해 줘야한다.

알림 채널 만들기 및 관리

알림 채널 만들기 및 관리  |  Android 개발자  |  Android Developers

Android 8.0(API 레벨 26)부터는 모든 알림을 채널에 할당해야 합니다. 채널마다 채널의 모든 알림에 적용되는 시각적/음향적 동작을 설정할 수 있습니다. 그런 다음 사용자는 이 설정을 변경하고 앱에서 차단하거나 표시해야 하는 알림 채널을 결정할 수 있습니다. Android 8.0의 채널 및 기타 새로운 알림 기능의 개요는 아래 동영상을 확인하세요. Android 8.0 기능을 포함하여 알림을 사용하는 샘플 코드는 Android 알림 샘플을 참조

developer.android.com

Leave a Reply

error: Content is protected !!