首页 > 解决方案 > 将 GCM 代码更新为 Android SDK > 26

问题描述

我正在做一个需要更新的项目,但我不太清楚我需要改变什么。我认为最好的选择是迁移到 FCM,但我的老板不同意我的看法。

我的接收器源代码:

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            ComponentName comp = new ComponentName(context.getPackageName(), GcmNotificationHandlerIntentService.class.getName());
            startWakefulService(context, (intent.setComponent(comp))); 
            setResultCode(Activity.RESULT_OK);
        }
    }

我在 Android 8 (sdk > 26) 上遇到下一个错误。

Fatal Exception: java.lang.RuntimeException: Unable to start receiver com.mediobanapp.pushMessages.gcm.GcmBroadcastReceiver: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x1000010 pkg=com.medioban cmp=com.medioban/com.mediobanapp.pushMessages.gcm.GcmNotificationHandlerIntentService (has extras) }: app is in background uid UidRecord{c6926af u0a161 RCVR idle procs:1 seq(0,0,0)}
   at android.app.ActivityThread.handleReceiver(ActivityThread.java:3682)
   at android.app.ActivityThread.-wrap18(Unknown Source)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1969)
   at android.os.Handler.dispatchMessage(Handler.java:108)
   at android.os.Looper.loop(Looper.java:166)
   at android.app.ActivityThread.main(ActivityThread.java:7390)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:926)

Caused by java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x1000010 pkg=com.medioban cmp=com.medioban/com.mediobanapp.pushMessages.gcm.GcmNotificationHandlerIntentService (has extras) }: app is in background uid UidRecord{c6926af u0a161 RCVR idle procs:1 seq(0,0,0)}
       at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1701)
       at android.app.ContextImpl.startService(ContextImpl.java:1657)
       at android.content.ContextWrapper.startService(ContextWrapper.java:644)
       at android.content.ContextWrapper.startService(ContextWrapper.java:644)
       at android.support.v4.content.WakefulBroadcastReceiver.startWakefulService(WakefulBroadcastReceiver.java:91)
       at com.mediobanapp.pushMessages.gcm.GcmBroadcastReceiver.onReceive(GcmBroadcastReceiver.java:14)
       at android.app.ActivityThread.handleReceiver(ActivityThread.java:3672)
       at android.app.ActivityThread.-wrap18(Unknown Source)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1969)
       at android.os.Handler.dispatchMessage(Handler.java:108)
       at android.os.Looper.loop(Looper.java:166)
       at android.app.ActivityThread.main(ActivityThread.java:7390)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:926)

标签: androidpush-notificationandroid-notificationsandroid-broadcastreceiver

解决方案


推荐阅读