Android Studio开发Firebase应用时this作Context创建类实例报错
报错原因与解决方法
根因说明
FirebaseMessagingService 本身间接继承自Context类,理论上直接传入this作为Context参数是合法的,出现参数类型不匹配报错大概率是导包异常或者类名冲突导致的。
分步解决
- 第一步:清理错误导包
删掉MyFirebaseMessagingService文件顶部所有不确定的导入语句,按快捷键Alt+Enter(Windows)/Option+Enter(Mac)手动选择导入你自己项目下的Helper类、Android官方的android.content.Intent类,避免导入其他库的同名类引发类型冲突。 - 第二步:替换Context参数
如果清理导包后仍然报错,可以直接使用全局ApplicationContext实例代替当前Service实例传参,修改三处报错代码如下:// 实例化Helper helper = new Helper(getApplicationContext()); // 实例化Intent Intent intent = new Intent(getApplicationContext(), FirebaseChatService.class); // 获取系统服务 AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(ALARM_SERVICE);
额外兼容提示
如果你的应用targetSdkVersion >= 31(适配Android 12及以上版本),需要修改PendingIntent的标记位,否则会触发运行时崩溃:
// 增加FLAG_IMMUTABLE标记 PendingIntent pendingIntent = PendingIntent.getService(this, 99, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
内容的提问来源于stack exchange,提问作者dip chit
相关产品推荐
相关产品推荐

