升级Parse Android SDK后运行PushServiceApi26.IllegalArgumentException
对于所有Android>=8.0(Oreo)的用户,我在开发者控制台中经常遇到崩溃。它是在将Parse从1.15.8升级到1.16.3之后开始出现的 由于没有太多信息,我尝试签入触发升级Parse Android SDK后运行PushServiceApi26.IllegalArgumentException,android,illegalargumentexception,Android,Illegalargumentexception,对于所有Android>=8.0(Oreo)的用户,我在开发者控制台中经常遇到崩溃。它是在将Parse从1.15.8升级到1.16.3之后开始出现的 由于没有太多信息,我尝试签入触发IllegalArgumentException的代码。这实际上是有意义的,以下是解析1.16.x版本的GcmBroadcastReceiver的onReceive()代码: @Override @CallSuper public void onReceive(Context context, Intent int
IllegalArgumentException
的代码。这实际上是有意义的,以下是解析1.16.x版本的GcmBroadcastReceiver的onReceive()
代码:
@Override
@CallSuper
public void onReceive(Context context, Intent intent) {
PushServiceUtils.runService(context, intent);
}
// In Parse 1.15.8, onReceive was instead calling
// ServiceUtils.runWakefulIntentInService(context, intent, PushService.class);
在PushServiceUtils
中:
public static boolean runService(Context context, @NonNull Intent intent) {
if (USE_JOBS) { // USE_JOBS : Android SDK >= 8.0 (Oreo)
return PushServiceApi26.run(context, intent);
} else {
return PushService.run(context, intent);
}
}
虽然我设法找到了bug发生的地方,但我对Android(尤其是推送通知)的了解还不够,无法理解到底发生了什么。在清单中,相关行:
<meta-data
android:name="com.parse.push.gcm_sender_id"
android:value="id:xxxxxxx" />
<service android:name="com.parse.PushService" />
<receiver
android:name="com.parse.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="bruce.worker.android" />
</intent-filter>
</receiver>
但我还是找不到原因。任何帮助都将不胜感激 我通过在带有Oreo的设备上重现问题,找到了解决方案。stacktrace中的错误更精确: Android java.lang.IllegalArgumentException:没有这样的服务 多亏了我,我得到了解决办法 我只需在清单中添加以下内容:
<service android:name="com.parse.PushServiceApi26"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true"/>
发布你的gradle文件!!嗨,对不起,我已经加了一个,还有吗???我以为服务中断了,因为添加了27.0.2
而不是26.1.0