Наблюдатель запускается касанием уведомления - PullRequest
0 голосов
/ 26 февраля 2020

Я использую наблюдателя, который создает уведомление при изменении данных:

private void setAndObserveNewBlogPosts() {
        BlogPostsViewModelFactory factory = new BlogPostsViewModelFactory(getApplication());
        ViewModelProvider vmp = new ViewModelProvider(this, factory);
        BlogPostsViewModel blogPostsViewModel = vmp.get(BlogPostsViewModel.class);

        blogPostsViewModel.getNewBlogPostsLive().observe(this, new Observer<ArrayList<BlogPost>>() {
            @Override
            public void onChanged(ArrayList<BlogPost> blogPosts) {
                Log.d(TAG, "onChanged: in main: new BlogPosts: ");
                if(action.equals("showNews")) {
                    return;
                }
                createNotificationChannel();
                makeNotification(blogPosts);
                Toast.makeText(getBaseContext(), "new data!", Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void makeNotification(ArrayList<BlogPost> blogPosts) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.setAction("showNews");
        PendingIntent pendingIntent = PendingIntent.getActivity(
                this,
                4,
                intent,
                PendingIntent.FLAG_UPDATE_CURRENT
        );

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "new");
        builder.setSmallIcon(R.drawable.ic_notification_icon);
        builder.setContentTitle("New Posts");
        builder.setContentText(blogPosts.size() + " new posts");
        builder.setContentIntent(pendingIntent);
        builder.setAutoCancel(true);

        NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);
        notificationManagerCompat.notify(0, builder.build());
    }

    private void createNotificationChannel() {
        // Create the NotificationChannel, but only on API 26+ because
        // the NotificationChannel class is new and not in the support library
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = "Name";
            String description = "Description";
            int importance = NotificationManager.IMPORTANCE_DEFAULT;
            NotificationChannel channel = new NotificationChannel("new", name, importance);
            channel.setDescription(description);
            // Register the channel with the system; you can't change the importance
            // or other notification behaviors after this
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);
        }
    }

Уведомление работает нормально, но при нажатии на уведомление по какой-то причине наблюдатель снова запускается, даже если данные остаются прежними. Почему это происходит? Когда приложение запускается нормально, а не из уведомления, наблюдатель не срабатывает.

...