FCM 致命异常:java.lang.IllegalStateException 不允许启动服务 Intent

Posted

技术标签:

【中文标题】FCM 致命异常:java.lang.IllegalStateException 不允许启动服务 Intent【英文标题】:FCM Fatal Exception: java.lang.IllegalStateException Not allowed to start service Intent 【发布时间】:2018-04-11 21:48:14 【问题描述】:

我正在使用 'com.google.firebase:firebase-messaging:11.8.0' 但某些 android 8 设备出现此错误 java.lang.IllegalStateException Not allowed to start service Intent。经过研究,我没有发现如何解决这个问题。

代码:

public class FirebaseMessagesService extends FirebaseMessagingService 


public static final String FCM_ACTION_MESSAGE = "com.project.services.fcm.ACTION_MESSAGE";
public static final String EXTRA_MESSAGE = "VALUE";

@Override
public void onMessageReceived(RemoteMessage remoteMessage) 
    super.onMessageReceived(remoteMessage);
    Gson gson = new Gson();
    Log.d("FCM", gson.toJson(remoteMessage.getData()));
    FirebaseMessage message = gson.fromJson(gson.toJson(remoteMessage.getData()), FirebaseMessage.class);
    Intent intent = new Intent(FCM_ACTION_MESSAGE);
    intent.setPackage("com.project");
    intent.putExtra(EXTRA_MESSAGE, message);
    startService(intent);

知道如何使用 FCM 在 android 8 上避免此 IllegalStateException 吗?

【问题讨论】:

奥利奥limits background execution. 使用 ContextCompat.startForegroundService 并将您的服务提升为前台服务。 @MarkKeen 你到底是什么意思?你有解决方案的一些示例代码吗?你的意思是 startForegroundService(intent); ? 我引用的是方法,而不是如何实现它。它是 v4 支持库的一部分 - developer.android.com/reference/android/support/v4/content/… - 使用或不使用它,无论哪种方式,您都必须处理 Oreo 后台限制来解决您的问题。 【参考方案1】:

从android O开始,你不能在后台启动IntentService。你需要为它创建后台服务。

除此之外,您需要执行以下操作:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
    startForegroundService(intent)
 else 
    startService(intent);

onHandleIntent 中执行以下操作:

 if (Build.VERSION.SDK_INT >= 26) 
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
        mBuilder.setSmallIcon(R.drawable.ic_launcher);
        mBuilder.setContentTitle("FCM Notif");
        mBuilder.setContentText("Processing notification..");
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        // notificationID allows you to update the notification later on.
        mNotificationManager.notify(100, mBuilder.build());
        startForeground(100, mBuilder.mNotification);
    

【讨论】:

完成,@Sagar 也帮我在帖子中投票,谢谢

以上是关于FCM 致命异常:java.lang.IllegalStateException 不允许启动服务 Intent的主要内容,如果未能解决你的问题,请参考以下文章

在异步任务中给出异常的进度对话框[重复]

Flutter:FCM未处理异常:空值检查运算符用于空值

颤振:FlutterFcmService - 致命:找不到回调

网络流量识别聚类FCM和GMM—使用聚类技术和性能比较进行网络流量异常检测

获取“致命异常 AsyncTask #1”

获取 Android 运行时:致命异常