通知中的打开活动似乎会破坏callstack

时间:2017-01-04 15:48:32

标签: android push-notification

我有一个活动可以从服务器发送的通知中打开,这也可以从应用程序上的其他活动打开,但是有一个问题。当从通知中打开活动时,如果用户尝试返回该应用程序转到后台并且下次打开它将显示登录(主)活动而不是调用堆栈中的最后一个活动,如果应用程序处于活动状态或处于后台状态,并显示任何错误消息,也不会停止调试过程。

这是我的通知代码

void client(Bundle bundle){
        String title = bundle.getString("title");
        String message = bundle.getString("message");
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        seticon(builder);
        builder.setContentTitle(title);
        builder.setContentText(message);
        if(message.length()>25){
            builder.setStyle(new NotificationCompat.BigTextStyle()
                    .bigText(message));
        }

        Intent resultIntent = new Intent(getBaseContext(), Client_form.class);
        PendingIntent resultPendingIntent =null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
            TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
            stackBuilder.addParentStack(Cliente_form.class);
            stackBuilder.addNextIntent(resultIntent);
            resultPendingIntent=
                    stackBuilder.getPendingIntent(
                            0,
                            PendingIntent.FLAG_UPDATE_CURRENT
                    );
        }
        builder.addAction(R.drawable.common_plus_signin_btn_icon_light,"Open",resultPendingIntent);
        builder.addAction(R.drawable.ic_mail_outline_black_24dp,"Test",null);
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(id_notifi++, builder.build());

        Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), uri);
        r.play();
 }

预期的行为是,如果活动在调用堆栈顶部打开,并且按下后退应该返回到上一个活动。

知道为什么会发生这种情况或如何使其按预期工作?

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,它与我的StackBuilder实现有关,在某些配置中,它会自动调用最初调用通知或通知广播接收器的活动的onDestroy方法。

尝试完全删除Stackbuilder,如果这样可以解决问题,那么你可以找到确切的问题,我可能会添加错误的类。