在Android 8.0(API级别26)和8.1(API级别27)中,Firebase会引发java.lang.IllegalStateException:WakefulBroadcastReceiver.startWakefulService异常。这是因为在这些版本中,后台服务启动方式发生了变化。
解决此问题的方法是使用新的启动服务方法。以下是一个包含代码示例的解决方案:
import android.content.Context;
import android.content.Intent;
import androidx.legacy.content.WakefulBroadcastReceiver;
public class MyFirebaseReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, MyFirebaseService.class);
serviceIntent.putExtras(intent.getExtras());
startWakefulForegroundService(context, serviceIntent);
}
}
import android.app.IntentService;
import android.content.Intent;
public class MyFirebaseService extends IntentService {
public MyFirebaseService() {
super("MyFirebaseService");
}
@Override
protected void onHandleIntent(Intent intent) {
// 执行后台操作
// ...
// 完成服务
MyFirebaseReceiver.completeWakefulIntent(intent);
}
}
这样,您就可以解决在Android 8.0和8.1中使用Firebase时遇到的java.lang.IllegalStateException:WakefulBroadcastReceiver.startWakefulService异常。