Gmail как функция уведомлений Android

Мне нужно реализовать функции уведомлений, такие как GMAIL, т.е. если экран в данный момент открыт, список должен автоматически обновляться, и уведомление не поступает. Если приложение закрыто, мы получаем уведомление. В GMAIL, если мы находимся в папке «Входящие» и приходит новая почта, она автоматически добавляется сверху без уведомления, и если приложение не открыто, мы получаем уведомление о новой почте. Я закодировал часть уведомлений, и она работает нормально, но единственное, что даже если я занимаюсь текущей деятельностью, я все равно получаю уведомления, которые я пытаюсь остановить.

Ниже приведен код класса Intent для отправки уведомления.

Intent listIntent = new Intent(this, ListActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ListActivity.class);
stackBuilder.addNextIntent(listIntent);

PendingIntent listPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.ic_launcher)
                .setContentTitle("xxxx")
                .setStyle(new NotificationCompat.BigTextStyle()
                        .bigText("Update List"))
                .setContentText("Update List").setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL).setWhen(System.currentTimeMillis());
        builder.setContentIntent(listPendingIntent);
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(NOTIFICATION_ID, builder.build());

Я много исследовал в Интернете и SO, но не получил никаких подходящих указателей. Кажется, есть решение от CommonsWare, но я не хочу использовать какую-либо внешнюю библиотеку. Также во время моего исследования я обнаружил, что знание того, какая активность находится на вершине, не является хорошей практикой для производства, поэтому я не могу использовать это, чтобы остановить уведомление, если моя текущая активность находится на вершине. Пожалуйста, порекомендуйте.


person Gaurav    schedule 24.12.2014    source источник
comment
Взгляните на это решение: stackoverflow.com/a/15949723/321354   -  person rciovati    schedule 24.12.2014
comment
knowing which activity is on top isn't a good practice to do in production почему? есть какие-либо проблемы?   -  person Pankaj Kumar    schedule 24.12.2014
comment
не показывать уведомление, если ваша текущая активность открыта... Это решило вашу проблему.   -  person NagarjunaReddy    schedule 24.12.2014
comment
@rciovati Спасибо за предложение. Я постараюсь и дам вам знать, если возникнут проблемы.   -  person Gaurav    schedule 25.12.2014


Ответы (1)


Это решило вашу проблему

 ActivityManager activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
            List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE);
            boolean isActivityFound = false;

            if (services.get(0).topActivity.getPackageName().toString().equalsIgnoreCase(getPackageName().toString()))
            {
                isActivityFound = true;
            }
            if (!isActivityFound)
            {
                NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("xxxx")
            .setStyle(new NotificationCompat.BigTextStyle()
                    .bigText("Update List"))
            .setContentText("Update List").setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL).setWhen(System.currentTimeMillis());
    builder.setContentIntent(listPendingIntent);
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(NOTIFICATION_ID, builder.build());
            }       
person NagarjunaReddy    schedule 24.12.2014