错误通知:无法展开RemoteViews:StatusBarNotification.在Android Nougat上

Dim*_*vin 14 java android android-notifications onesignal android-7.0-nougat

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

这适用于我的所有设备但是:

我只在使用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:android.app.ActivityThread的通知(pri = 0 contentView = null vibrate = null sound = null defaults = 0x0 flags = 0x19 color = 0xff56a0d3 vis = PUBLIC semFlags = 0x0 semPriority = 0)) $ H.handleMessage(ActivityThread.java:1813)位于android.app.A.运行时,Android.O.Ra上的android.O.Roper.loop(Looper.java:154)上的android.os.Handler.dispatchMessage(Handler.java:102) ActivityThread.java:6776)位于com.android.internal.os的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1496)的java.lang.reflect.Method.invoke(Method.java) .ZygoteInit.main(ZygoteInit.java:1386)

不幸的是,我不能在我的设备上重现这个问题,Android Nougat以了解如何消除它.

我试图更改图形资源,如通知图标,以清理项目,以遵循此建议.

我注意到这个问题的设备数量增加了一个星期,当我发布新版本的应用程序后,这些数字减少到零.

此问题还向Google开发人员OneSignal报告SDK.

我正在寻找任何可以帮助消除此问题的解决方法,任何想法或建议.

Dmi*_*kov 10

我认为发生此崩溃是因为您的通知包含对PendingIntent包中图标的整数引用,并且该整数稍后在发布到NotificationManager时被引用.

在获取整数引用和待处理的意图之间,应用程序已更新并且所有可绘制引用都已更改.用于引用正确drawable的整数现在引用了不正确的drawable或者根本没有引用(根本没有 - 导致此崩溃)

这可以证明

我注意到这个问题的设备数量增加了一个星期,当我发布新版本的应用程序后,这些数字减少到零.

作为解决方案,您可以在应用程序更新后重建所有通知.