【问题标题】:Android: update specific notification from multiple notifications which have remoteviewAndroid:从具有远程视图的多个通知中更新特定通知
【发布时间】:2014-12-09 14:48:27
【问题描述】:

我正在创建包含具有播放/暂停图标的通知的应用程序,其中。当只有一个通知只有一个通知 ID 时,它可以完美运行,它仅通过一个通知 ID 更改播放/暂停图标,但存在多个通知的问题。当有多个通知时,每个通知都有播放/暂停图标。当我从其中一个通知中单击播放/暂停图标时,它只会更改通知堆栈中的顶部通知图标。我知道这个问题是由于它在单击任何通知时获得的通知 ID。我想在单击播放/暂停图标时获取所有通知的 ID。我已经尝试过对 pendingIntent 内容进行一些更改,但尚未找到一些确切的解决方案。

我想知道,有没有办法通过点击播放/暂停图标来获取通知的通知ID?,所以我可以通过通知ID更改图标或更新通知。需要通过那里的通知 id 更新通知。

我已使用远程视图在通知中获取服装布局。代码如下

通知代码

    RemoteViews mRemoteViews1 = null;
    PendingIntent pendingIntent = null;
    PendingIntent pendingIntent1 = null;
    PendingIntent pendingIntent2 = null;
    PendingIntent pendingIntent3 = null;
    PendingIntent pendingIntent4 = null;
    PendingIntent pendingIntent5 = null;

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

            mRemoteViews1 = new RemoteViews(getPackageName(),
                    R.layout.custom_notification);

    } else {
        if (mState == palyer.Paused || mState == palyer.Stopped) {

            try {
                Log.e("LOG", "State.Paused || State.Stopped");
                mRemoteViews1.setImageViewResource(R.id.playpush,
                        R.drawable.playdetailfornoti);  // play icon

            } catch (Exception e) {}

        } else if (mState == palyer.Playing) {
            try {
                Log.e("LOG", "State.Playing");
                mRemoteViews1.setImageViewResource(R.id.playpush,
                        R.drawable.pushdetail);   // pushicon

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

            } catch (Exception e) {}
        }
        else {
            try {
                Log.e("LOG", "else");
                mRemoteViews1.setImageViewResource(R.id.playpush,
                        R.drawable.pushdetail);   // pushicon

            } catch (Exception e) {}
        }
    }

    Intent intent = new Intent(ACTION_TOGGLE_PLAYBACK);
    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);

    Intent newintent = new Intent(this, Splace.class);
    newintent.putExtra("newsId",_id);
    newintent.putExtra("message",title);
    newintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
            Intent.FLAG_ACTIVITY_SINGLE_TOP);
    newintent.setAction("actionstring" + System.currentTimeMillis());

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


    mRemoteViews1.setTextViewText(R.id.playertitle,
            MusicList.CurrentNotificationEntity.scrape_title);

    mRemoteViews1
                .setTextViewText(R.id.playerapaer, Base
                        .getNewsPaperName(Base.sharedPref.getString(
                                MusicList.CurrentNotificationEntity.newspaperID,
                                "Palpal")));
    mRemoteViews1.setOnClickPendingIntent(R.id.forward, pendingIntent2);
    mRemoteViews1.setOnClickPendingIntent(R.id.backword, pendingIntent3);

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

    mRemoteViews1.setOnClickPendingIntent(R.id.playpush, pendingIntent);
    mRemoteViews1.setOnClickPendingIntent(R.id.close, pendingIntent1);

    Notification  mNotification1 = new NotificationCompat.Builder(
                getApplicationContext())
                .setSmallIcon(R.drawable.ic_launcher)
                .setWhen(System.currentTimeMillis())
                .setPriority(Notification.PRIORITY_HIGH)
                .setDeleteIntent(pendingIntent1)
                .setAutoCancel(true)
                .setContent(mRemoteViews1).setOngoing(false).build();

    mNotificationManager.notify(Base.currentNotificationNo, mNotification1);

请帮助我提前谢谢

【问题讨论】:

    标签: android notifications remoteview


    【解决方案1】:

    我只需在您放入 PendingIntent 的意图中添加一个 ID,以了解您正在操作哪个通知,因此如下所示:

    意图意图 = 新意图(ACTION_TOGGLE_PLAYBACK);

    intent.putExtra(EXTRA_ID, songID);

    您可以稍后在被调用的代码中提取这个额外的内容:

    String songID = intent.getStringExtra(EXTRA_ID);

    【讨论】:

      【解决方案2】:

      经过大量尝试,我通过更改待处理意图中的一些代码找到了解决方案,如下代码所示

      我的代码在下面

      public void UpdateNotificationfunction(int currentNotificationNo) {
       RemoteViews mRemoteViews1 = null;
          PendingIntent pendingIntent = null;
          PendingIntent pendingIntent1 = null;
          PendingIntent pendingIntent2 = null;
          PendingIntent pendingIntent3 = null;
          PendingIntent pendingIntent4 = null;
          PendingIntent pendingIntent5 = null;
      
          if (mRemoteViews1 == null) {
              Log.d("LOG", "mRemoteViews is null");
      
                  mRemoteViews1 = new RemoteViews(getPackageName(),
                          R.layout.custom_notification);
      
          } else { 
              if (mState == palyer.Paused || mState == palyer.Stopped) { 
      
                  try { 
                      Log.e("LOG", "State.Paused || State.Stopped");
                      mRemoteViews1.setImageViewResource(R.id.playpush,
                              R.drawable.playdetailfornoti);  // play icon
      
                  } catch (Exception e) {}
      
              } else if (mState == palyer.Playing) { 
                  try { 
                      Log.e("LOG", "State.Playing");
                      mRemoteViews1.setImageViewResource(R.id.playpush,
                              R.drawable.pushdetail);   // pushicon
      
                  } catch (Exception e) {}
              } else if (mState == palyer.Retrieving) { 
                  try { 
                      Log.e("LOG", "else Retrieving");
                      mRemoteViews1.setImageViewResource(R.id.playpush,
                              R.drawable.playdetailfornoti); // play icon
      
                  } catch (Exception e) {}
              } 
              else { 
                  try { 
                      Log.e("LOG", "else");
                      mRemoteViews1.setImageViewResource(R.id.playpush,
                              R.drawable.pushdetail);   // pushicon
      
                  } catch (Exception e) {}
              } 
          } 
      
          Intent intent = new Intent(ACTION_TOGGLE_PLAYBACK);
          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);
      
          Intent newintent = new Intent(this, Splace.class);
          newintent.putExtra("newsId",_id);
          newintent.putExtra("message",title);
          newintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
                  Intent.FLAG_ACTIVITY_SINGLE_TOP);
          newintent.setAction("actionstring" + System.currentTimeMillis());
      
          pendingIntent = PendingIntent.getService(getApplicationContext(),
                  currentNotificationNo, intent, PendingIntent.FLAG_UPDATE_CURRENT); // changed here currentNotificationNo insted of REQUEST_CODE_STOP
          pendingIntent1 = PendingIntent.getService(getApplicationContext(), 0,
                  intent1, 0);
          pendingIntent2 = PendingIntent.getService(getApplicationContext(),
                  currentNotificationNo, intent2, PendingIntent.FLAG_UPDATE_CURRENT);// changed here currentNotificationNo insted of REQUEST_CODE_STOP
          pendingIntent3 = PendingIntent.getService(getApplicationContext(),
                  currentNotificationNo, intent3, PendingIntent.FLAG_UPDATE_CURRENT);// changed here currentNotificationNo insted of REQUEST_CODE_STOP
          PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                  newintent, 0);
          pendingIntent4 = PendingIntent.getService(getApplicationContext(),
                  currentNotificationNo, intent4, PendingIntent.FLAG_UPDATE_CURRENT);// changed here currentNotificationNo insted of REQUEST_CODE_STOP
          pendingIntent5 = PendingIntent.getService(getApplicationContext(),
                  currentNotificationNo, intent5, PendingIntent.FLAG_UPDATE_CURRENT);// changed here currentNotificationNo insted of REQUEST_CODE_STOP
      
      
          mRemoteViews1.setTextViewText(R.id.playertitle,
                  MusicList.CurrentNotificationEntity.scrape_title); 
      
          mRemoteViews1
                      .setTextViewText(R.id.playerapaer, Base
                              .getNewsPaperName(Base.sharedPref.getString( 
                                      MusicList.CurrentNotificationEntity.newspaperID, 
                                      "Palpal"))); 
          mRemoteViews1.setOnClickPendingIntent(R.id.forward, pendingIntent2);
          mRemoteViews1.setOnClickPendingIntent(R.id.backword, pendingIntent3);
      
          mRemoteViews1.setOnClickPendingIntent(R.id.playertitle, contentIntent);
          mRemoteViews1.setOnClickPendingIntent(R.id.playerapaer, contentIntent);
          mRemoteViews1.setOnClickPendingIntent(R.id.playerimage, contentIntent);
      
          mRemoteViews1.setOnClickPendingIntent(R.id.playpush, pendingIntent);
          mRemoteViews1.setOnClickPendingIntent(R.id.close, pendingIntent1);
      
          Notification  mNotification1 = new NotificationCompat.Builder(
                      getApplicationContext())
                      .setSmallIcon(R.drawable.ic_launcher)
                      .setWhen(System.currentTimeMillis())
                      .setPriority(Notification.PRIORITY_HIGH)
                      .setDeleteIntent(pendingIntent1)
                      .setAutoCancel(true) 
                      .setContent(mRemoteViews1).setOngoing(false).build();
      
          mNotificationManager.notify(currentNotificationNo, mNotification1); // changed here currentNotificationNo insted of Base.currentNotificationNo
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2018-08-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多