代码之家  ›  专栏  ›  技术社区  ›  Umesh AHIR

当有多个通知可用时,无法取消接受和拒绝操作的通知

  •  2
  • Umesh AHIR  · 技术社区  · 8 年前

    首先,让我向您介绍整个过程。首先,我实现了一个成功的FCM。我已经收到了我想要的所有类型的通知。 问题是,只有一个通知可用时,通知清除(取消)。但当时有多个相同的通知可用,最后只有一个通知将被取消。

    我想在接受和拒绝时在浏览器上打开url

    我在下面附上了我的代码。

    private void sendNotification1(String title, String body, String data) {
    
        int when = new Random().nextInt();
    
        String url = "http://google.com";
        String url1 = "http://google.com";
        try {
            JSONObject dataObject = new JSONObject(data);
            url = dataObject.getString("acceptUrl");
            url1 = dataObject.getString("declineUrl");
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        PendingIntent accceptIntent = NotificationAcceptActivity.getAcceptDismissIntent(this, when, url);
        PendingIntent dismissIntent = NotificationRejectActivity.getAcceptDismissIntent(this, when, url1);
    
    
        Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setContentTitle(title)
                .setContentText(body)
                .setLargeIcon(BitmapFactory.decodeResource(this.getResources(), R.mipmap.ic_launcher))
                .setSmallIcon(R.mipmap.ic_notication)
                .setAutoCancel(true)
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                .setSound(defaultSoundUri)
                .setPriority(Notification.PRIORITY_HIGH)
                .addAction(R.drawable.ic_close_black_24dp, "Reject", dismissIntent)
                .addAction(R.drawable.ic_check_black_24dp, "Accept", accceptIntent);
    
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(when, notificationBuilder.build());
    
    }
    

    公共类通知可接受性扩展活动{

    public static final String NOTIFICATION_ID = "NOTIFICATION_ID";
    public static final String URL = "ACCEPT_URL";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        String url = getIntent().getStringExtra(URL);
        Intent dismissIntent = new Intent(Intent.ACTION_VIEW);
        dismissIntent.setData(Uri.parse(url));
        Log.e("NotificationAccept ", "url:- " + url);
        startActivity(dismissIntent);
    
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        manager.cancel(getIntent().getIntExtra(NOTIFICATION_ID, -1));
        finish();
    
    }
    
    public static PendingIntent getAcceptDismissIntent(Context context, int notificationId, String url) {
        Intent intent = new Intent(context, NotificationAcceptActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        intent.putExtra(URL, url);
        intent.putExtra(NOTIFICATION_ID, notificationId);
        PendingIntent dismissAcceptIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        return dismissAcceptIntent;
    }
    

    }

    公共类NotificationRejectActivity扩展活动{

    public static final String NOTIFICATION_ID = "NOTIFICATION_ID";
    public static final String URL = "ACCEPT_URL";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        String url = getIntent().getStringExtra(URL);
        Intent dismissIntent = new Intent(Intent.ACTION_VIEW);
        dismissIntent.setData(Uri.parse(url));
        Log.e("NotificationReject ", "url:- " + url);
        startActivity(dismissIntent);
    
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        manager.cancel(getIntent().getIntExtra(NOTIFICATION_ID, -1));
        finish();
    
    }
    
    public static PendingIntent getAcceptDismissIntent(Context context, int notificationId, String url) {
        Intent intent = new Intent(context, NotificationRejectActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        intent.putExtra(URL, url);
        intent.putExtra(NOTIFICATION_ID, notificationId);
        PendingIntent dismissAcceptIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        return dismissAcceptIntent;
    }
    

    }

    1 回复  |  直到 8 年前
        1
  •  1
  •   ND1010_    8 年前

    0应替换为所有中的每个唯一编号(请求代码) PendingIntent 对象

    代替

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                intent,  PendingIntent.FLAG_UPDATE_CURRENT);
    

    PendingIntent contentIntent = PendingIntent.getActivity(this, uniqueNumber,
                intent,  PendingIntent.FLAG_UPDATE_CURRENT);
    
    推荐文章