2

I am working on such application which is using multiple notification.where each notification have playpause icon which perform play/pause of music player. but there is odd behavior with updating that notifications which keep blinking while updating it.

My Code is below

 @SuppressLint("NewApi")
    public void UpdateNotificationfunction(int currentNotificationNo) {
        PendingIntent pendingIntent = null;
        PendingIntent pendingIntent1 = null;
        PendingIntent pendingIntent2 = null;
        PendingIntent pendingIntent3 = null;
        PendingIntent pendingIntent4 = null;
        PendingIntent pendingIntent5 = null;

        if (mRemoteViews1 == null || newRemoteview) {
            Log.d("LOG", "mRemoteViews is null 123");

            mRemoteViews1 = new RemoteViews(getPackageName(),
                    R.layout.custom_notification);
            newRemoteview = false;
        } else {

                if (mState == State.Paused || mState == State.Stopped) {
                    try {

                        mRemoteViews1.setImageViewResource(R.id.playpush,
                                R.drawable.playdetailfornoti);

                    } catch (Exception e) {
                    }

                } else if (mState == State.Playing) {
                    try {

                        mRemoteViews1.setImageViewResource(R.id.playpush,
                                R.drawable.pushdetail);

                    } catch (Exception e) {
                    }
                } else if (mState == State.Retrieving) {
                    try {
                        Log.e("LOG", "else Retrieving");
                        mRemoteViews1.setImageViewResource(R.id.playpush,
                                R.drawable.playdetailfornoti);

                    } catch (Exception e) {
                    }
                } else {
                    try {
                        Log.e("LOG", "else");
                        if (NetworkUtil.isNetworkAvailable(_context)) {
                            mRemoteViews1.setImageViewResource(R.id.playpush,
                                    R.drawable.pushdetail);
                        }
                        else {
                            mRemoteViews1.setImageViewResource(R.id.playpush,
                                    R.drawable.playdetailfornoti);
                        }
                    } catch (Exception e) {
                    }
            }

        }

        Intent intent = new Intent(ACTION_TOGGLE_PLAYBACK);
        intent.removeExtra("playposition");
        intent.putExtra("playposition", currentNotificationNo);


        Intent intent1 = new Intent(CLOSE_PUSH_NOTIFICATION);
        Intent intent2 = new Intent(ACTION_NEXT);
        Intent intent3 = new Intent(ACTION_PREVIOUS);
        Intent intent4 = new Intent(ACTION_STOP);
        Intent intent5 = new Intent(ACTION_PLAY_NOTIFICATION_START);
        intent5.removeExtra("playposition");
        intent1.removeExtra("playposition"); // here i remove put extra 
        intent5.putExtra("playposition", currentNotificationNo);
        intent1.putExtra("playposition", currentNotificationNo);// here i add put extra with current notification id
        Log.e("LOG", "poistionset || " + currentNotificationNo);

        Intent newintent = new Intent(this, Splace.class);
        newintent.putExtra("newsId",MusicList.CurrentNotificationEntity._id);
        newintent.putExtra("playposition", currentNotificationNo);

        pendingIntent = PendingIntent.getService(getApplicationContext(),
                currentNotificationNo, intent, PendingIntent.FLAG_ONE_SHOT);
        pendingIntent1 = PendingIntent.getService(getApplicationContext(),
                currentNotificationNo, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
        pendingIntent2 = PendingIntent.getService(getApplicationContext(),
                currentNotificationNo, intent2,
                PendingIntent.FLAG_UPDATE_CURRENT);
        pendingIntent3 = PendingIntent.getService(getApplicationContext(),
                currentNotificationNo, intent3,
                PendingIntent.FLAG_UPDATE_CURRENT);
        PendingIntent contentIntent = PendingIntent.getActivity(
                getApplicationContext(), currentNotificationNo, newintent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        pendingIntent4 = PendingIntent.getService(getApplicationContext(),
                currentNotificationNo, intent4,
                PendingIntent.FLAG_UPDATE_CURRENT);
        pendingIntent5 = PendingIntent.getService(getApplicationContext(),
                currentNotificationNo, intent5,
                PendingIntent.FLAG_UPDATE_CURRENT);

        mRemoteViews1.setTextViewText(R.id.playertitle,
                MusicList.CurrentNotificationEntity.scrape_title);
        mRemoteViews1.setViewVisibility(R.id.playernewspapaer, View.VISIBLE);
        mRemoteViews1.setViewVisibility(R.id.forward, View.VISIBLE);
        mRemoteViews1.setViewVisibility(R.id.backword, View.VISIBLE);

        mRemoteViews1.setOnClickPendingIntent(R.id.forward, pendingIntent2);
        mRemoteViews1.setOnClickPendingIntent(R.id.backword, pendingIntent3);

        mRemoteViews1.setOnClickPendingIntent(R.id.playertitle, contentIntent);
        mRemoteViews1.setOnClickPendingIntent(R.id.playernewspapaer,
                contentIntent);
        mRemoteViews1.setOnClickPendingIntent(R.id.playerimage, contentIntent);

            //if (mNotification1 == null) {
         mNotification1 = new NotificationCompat2.Builder(
                    getApplicationContext()).setSmallIcon(R.drawable.ic_launcher)
                    .setWhen(System.currentTimeMillis())
                    .setPriority(Notification.PRIORITY_DEFAULT)
                    .setDeleteIntent(pendingIntent1).setAutoCancel(true)
                    .setOnlyAlertOnce(true)
                    .setContent(mRemoteViews1).setOngoing(false).build();
    /*}
    else {
            mNotification1.contentView = mRemoteViews1;
    }*/ //this comment solve my same id issue , I have put this for avoid blinking of notification
                        .setContent(mRemoteViews1).setOngoing(false).build();


        mNotificationManager.notify(currentNotificationNo, mNotification1);
    }

PLEASE HELP ME

Mayur Raval
  • 3,250
  • 6
  • 34
  • 57

2 Answers2

2

After a tries a lot, I found the solution for blinking issue and duplicate deleteintent issue

 if (mNotification1 == null) {
     // create when notification not avalible
         mNotification1 = new NotificationCompat2.Builder(
                    getApplicationContext()).setSmallIcon(R.drawable.ic_launcher)
                    .setWhen(System.currentTimeMillis())
                    .setPriority(Notification.PRIORITY_DEFAULT)
                    .setDeleteIntent(pendingIntent1).setAutoCancel(true)
                    .setOnlyAlertOnce(true)
                    .setContent(mRemoteViews1).setOngoing(false).build();
    }
    else {
          // this code will solve the blink issue
            mNotification1.deleteIntent = pendingIntent1; // this will solve the deleteintent issue
            mNotification1.contentView = mRemoteViews1;
    }
Mayur Raval
  • 3,250
  • 6
  • 34
  • 57
0

You provide a single PendingIntent that will be sent when the notification is deleted by the user. This PendingIntent is provided in the call to setDeleteIntent() when constructing the notification. You can't get Android to send 5 PendingIntents when your notification is deleted by the user.

David Wasser
  • 93,459
  • 16
  • 209
  • 274
  • Thanks for answer, and Sorry for some mistake.I got solution after comment some code later on,which i updated , but there is other problem notification blinking issue , i have updated information and question also please see the information and suggest me what to do? – Mayur Raval Jan 19 '15 at 10:17