Salve a tutti, sto scrivendo un'app che invia e riceve sms e al momento riesco ad avere una conferma che il messaggio sia stato inviato (o meno) tramite un broadcast receiver.
Per identificare quale sms è stato inviato ho pensato di aggiungere all'intent degli extras, ed in particolare uno contenente il numero del destinatario e l'altro contenente il testo del messaggio.
Così facendo però riesco ad avere una "notifica" corretta solo per il primo messaggio, nel senso che dal secondo messaggio in poi ricevo comunque la conferma di sms inviato ma al momento di leggere gli extras del messaggio relativo ottengo sempre quelli del primo messaggio inviato.
Il risultato è quindi che se invio 3 sms, questi vengono consegnati correttamente, ma la mia app dice che sono stati inviati 3 sms tutti uguali (al primo).
Un altra cosa strana è che quando ricevo un nuovo sms in un certo senso si resetta il broadcast receiver e quindi il successivo sms che invierò sarà notificato correttamente... dal secondo in poi stessa storia!
Vi posto il codice della mia classe SmsSender:
codice:
class SmsSender{
private final String SENT = "SMS_SENT";
private static SmsSender instance=null;
private BroadcastReceiver br;
SmsSender(){}
//SINGLETON
public static SmsSender getSmsSender(Context ctx, AddressBook ab, DBManager dbm){
if(instance==null && ctx!=null){
instance=new SmsSender();
instance.ctx=ctx;
instance.ab=ab;
instance.dbm=dbm;
instance.setBR();
}
return instance;
}
private void setBR(){
br=new BroadcastReceiver(){
public void onReceive(Context arg0, Intent arg1)
{
br=null;
switch (getResultCode())
{
case Activity.RESULT_OK:
if(arg1.hasExtra("text") && arg1.hasExtra("receiver")){
Log.i("SMS","SMS sent to "+arg1.getStringExtra("receiver")+": "+arg1.getStringExtra("text"));
}
break;
.....
}
}
};
ctx.registerReceiver(br, new IntentFilter(SENT));
}
public void send(String phoneNumber, String text) {
String nums[]=phoneNumber.split(",");
for(int i=0; i<nums.length; ++i){
if(nums[i]!="" && text!=""){
SmsManager sms = SmsManager.getDefault();
ArrayList<String> parts = sms.divideMessage(text);
messageCount = parts.size();
ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>(messageCount);
Intent myIntent=new Intent(SENT);
**myIntent.putExtra("receiver", nums[i]);
myIntent.putExtra("text", text);**
for (int j = 0; j < messageCount; j++){
sentIntents.add(PendingIntent.getBroadcast(ctx, 0, myIntent,0));
}
sms.sendMultipartTextMessage( nums[i].trim(), null, parts, sentIntents, null);
}else{
Notifica.notify(ab.getContactName(nums[i])+": Error sending SMS",ctx);
}}
}}
Grazie a tutti per l'attenzione!