SmsManager como funciona o sistema de confirmação de entrega

Estou com um problema ao utilizar o smsManager, ainda não entendi 100% como funciona o sistema de confirmação de entrega dele.

Em minha aplicação eu tenho um modelo (ModConfRastreador) que armazena o telefone, a mensagem e uma imagem de status, percorro um array com estes modelos e passo eles por parâmetro para o método de enviar mensagens, lá dentro dele é criada a PendentIntent de Delivey e dependendo de seu status ela atualiza com uma imagem o meu objeto modelo, o problema é que quando a primeira mensagem recebe uma confirmação de entrega todos meus objetos do arrayAdapter atualizam com a mesma imagem de status.

Peço a ajuda de vocês, porque não consegui entender muito bem como funciona o sistema de entrega, não sei se é por isso que estou tendo problemas, ou se é algum erro de programação ou então a forma como estou utilizando.

 private void BtnEnviarSMS(){
        for(ModConfRastreador conf : arrayModConfRastreador){
            enviarSMS(conf, false);

        }

    }

private void enviarSMS(final ModConfRastreador modelo, final boolean exibeMSG) {
    try {
        String phoneNumber = modelo.getTelefone();
        String message = modelo.getComando();
        modelo.setImagem(R.drawable.ic_check_aguardando);
        if (message.equals(null) || message.equals("")) message = "\n";


        String SENT = "SMS_SENT";
        String DELIVERED = "SMS_DELIVERED";

        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
                new Intent(SENT), 0);

        PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
                new Intent(DELIVERED), 0);

        //---when the SMS has been sent---
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode()) {

                    case Activity.RESULT_OK:
                        if (exibeMSG) {
                            Toast.makeText(getBaseContext(), "SMS Enviado",
                                    Toast.LENGTH_SHORT).show();
                        }
                        modelo.setImagem(R.drawable.ic_check_aguardando);
                        break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        if(exibeMSG){
                        Toast.makeText(getBaseContext(), "Falha Generica",
                                Toast.LENGTH_SHORT).show();
                        }
                        modelo.setImagem(R.drawable.ic_check_not);
                        break;
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        if(exibeMSG) {
                        Toast.makeText(getBaseContext(), "Sem Serviço",
                                Toast.LENGTH_SHORT).show();
                        }
                        modelo.setImagem(R.drawable.ic_check_not);
                        break;
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        if(exibeMSG) {
                        Toast.makeText(getBaseContext(), "Null PDU",
                                Toast.LENGTH_SHORT).show();
                        }
                        modelo.setImagem(R.drawable.ic_check_not);
                        break;
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        if(exibeMSG) {
                        Toast.makeText(getBaseContext(), "Radio off",
                                Toast.LENGTH_SHORT).show();
                        }
                        modelo.setImagem(R.drawable.ic_check_not);
                        break;
                }

                aaComandos.notifyDataSetChanged();
            }
        }, new IntentFilter(SENT));

        //---when the SMS has been delivered---
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode()) {
                    case Activity.RESULT_OK:
                        if(exibeMSG) {
                        Toast.makeText(getBaseContext(), "SMS Entregue",
                                Toast.LENGTH_SHORT).show();
                        }
                        modelo.setImagem(R.drawable.ic_check_ok);
                        break;
                    case Activity.RESULT_CANCELED:
                        if(exibeMSG) {
                        Toast.makeText(getBaseContext(), "SMS não entregue ",
                                Toast.LENGTH_SHORT).show();
                        }
                        modelo.setImagem(R.drawable.ic_check_not);
                        break;
                }

                aaComandos.notifyDataSetChanged();
            }
        }, new IntentFilter(DELIVERED));


        aaComandos.notifyDataSetChanged();
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);

    }catch (Exception e){
        e.printStackTrace();
    }
}

Geralmente quando envia SMS via celular(chip), vai e volta operadora bloqueia o envio. Existem algumas empresas que enviam direto operadora, conheço a www.smspeople.com.br que fazem integração de envio, resposta com número curto. Tem os manuais inclusive em java, php, etc.;;;
Obs: Envio internacionais também pessoas consegue burlar número curto, mudam o senderID(número de disparo), porém estes também a operadora acaba bloqueando, tem buscar soluções com empresas que tenha o short number com contratos direto com operadoras nacionais.,…