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