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();
}
}