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的主要内容,如果未能解决你的问题,请参考以下文章
颤振:FlutterFcmService - 致命:找不到回调