【发布时间】:2018-04-03 01:28:16
【问题描述】:
我使用OneSignal SDK 来显示通知。
我在OneSignalPushService.java 做。
OneSignalPushService.java:
public class OneSignalPushService extends NotificationExtenderService {
@Override
protected boolean onNotificationProcessing(OSNotificationReceivedResult notification) {
if (!TinyDbWrap.getInstance().isPushEnabled()) {
KLog.d(this.getClass().getSimpleName(), "Notification will not displayed");
return true;
}
OverrideSettings overrideSettings = new OverrideSettings();
overrideSettings.extender = new NotificationCompat.Extender() {
@Override
public NotificationCompat.Builder extend(NotificationCompat.Builder notificationBuilder) {
notificationBuilder.setDefaults(0);
notificationBuilder.setContentTitle(getApplicationContext().getResources().getString(R.string.app_name));
boolean is_in_silent_mode = false; /*or true by user's settings in app*/
/*TinyDbWrap.getInstance()... - it stores user's settings*/
KLog.d(OneSignalPushService.class.getSimpleName(), "Notification isSoundPushEnabled: " + TinyDbWrap.getInstance().isSoundPushEnabled());
if (!is_in_silent_mode && TinyDbWrap.getInstance().isSoundPushEnabled()) {
notificationBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
} else {
notificationBuilder.setSound(null);
}
KLog.d(OneSignalPushService.class.getSimpleName(), "Notification isVibrationPushEnabled: " + TinyDbWrap.getInstance().isVibrationPushEnabled());
if (!is_in_silent_mode && TinyDbWrap.getInstance().isVibrationPushEnabled()) {
notificationBuilder.setVibrate(new long[]{0, 100, 200, 300, 400});
} else {
notificationBuilder.setVibrate(new long[]{0});
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
notificationBuilder.setColor(ContextCompat.getColor(getApplicationContext(), R.color.bg_first_item_white_scheme));
}
notificationBuilder.setLights(ContextCompat.getColor(getApplicationContext(), R.color.time_white_sheme), 500, 500);
return notificationBuilder;
}
};
OSNotificationDisplayedResult result = displayNotification(overrideSettings);
if (result != null) {
KLog.d(OneSignalPushService.class.getSimpleName(), "Notification displayed with id: " + result.androidNotificationId);
}
return true;
}
}
这适用于我所有的设备,但是:
我仅在装有 Android Nougat 的设备上收到大量关于 Crashlytics 的此问题:
致命异常:android.app.RemoteServiceException:错误通知 从包 my.package 发布: 无法将 RemoteViews 扩展为: StatusBarNotification(pkg=my.package user=UserHandle{0} id=-1542711428 tag=null key=0|my.package|-1542711428|null|10184: 通知(pri=0 contentView=null 振动=null sound=null defaults=0x0 flags=0x19 color=0xff56a0d3 vis=PUBLIC semFlags=0x0 semPriority=0)) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1813) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6776) 在 java.lang.reflect.Method.invoke(Method.java) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
很遗憾,我无法在我的设备上使用Android Nougat 重现此问题,以了解如何消除它。
为了关注this advice,我尝试更改通知图标等图形资源,清理项目。
我注意到,当我稍后发布该应用的新版本时,出现此问题的设备数量在一周内增加,这些数字减少到零。
这个问题还有reported to Google和developers of OneSignal SDK。
我正在寻找可以帮助解决此问题的任何解决方法、任何想法或建议。
【问题讨论】:
-
当您发送一个信号通知时,您是否传递了 Big Picture 参数?
-
@AmjadKhan 不,你可以在这里看到所有参数 - drive.google.com/file/d/0B-D8XWFJqEwxYW9OVzd6Snp3d0U/…
-
@RajeshKushvaha 我认为您的链接没有用,因为我的问题仅发生在
Android Nougat而不是所有Android Nougat。另外,在我问问题之前,我检查了所有关于 SO 的答案(我认为) -
发送通知后,您是否更新了apk以播放商店或由于Message Title = null而引发的问题
标签: java android android-notifications onesignal android-7.0-nougat