升级 Parse Android SDK 后出现 PushServiceApi26.run 的 IllegalArgumentException
IllegalArgumentException with PushServiceApi26.run after upgrading Parse Android SDK
对于 Android >= 8.0 (Oreo) 的所有用户,我在开发者控制台中反复出现崩溃。它是在将 Parse 从 1.15.8 升级到 1.16.3 后开始发生的。
没有太多信息,我试图检查 IllegalArgumentException
触发的代码。它实际上是有道理的,这里是 GcmBroadcastReceiver's onReceive()
for Parse 1.16.x release 的代码:
@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);
}
}
虽然我设法找到了错误发生的位置,但我对 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 的设备上重现问题找到了解决方案。堆栈跟踪中的错误更精确:
Android java.lang.IllegalArgumentException: No such service
然后我得到了解决方案感谢。
我只需要在清单中添加这个:
<service android:name="com.parse.PushServiceApi26"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true"/>
对于 Android >= 8.0 (Oreo) 的所有用户,我在开发者控制台中反复出现崩溃。它是在将 Parse 从 1.15.8 升级到 1.16.3 后开始发生的。
没有太多信息,我试图检查 IllegalArgumentException
触发的代码。它实际上是有道理的,这里是 GcmBroadcastReceiver's onReceive()
for Parse 1.16.x release 的代码:
@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);
}
}
虽然我设法找到了错误发生的位置,但我对 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 的设备上重现问题找到了解决方案。堆栈跟踪中的错误更精确:
Android java.lang.IllegalArgumentException: No such service
然后我得到了解决方案感谢
我只需要在清单中添加这个:
<service android:name="com.parse.PushServiceApi26"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true"/>