2012-09-03 8 views
11

Sto lavorando su un'applicazione android sms. Posso inviare sms a contatto singolo usando il seguente codice.Scrivi inviato sms al contenuto: // sms/inviato tabella

sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 

Ora voglio inviare sms a multicontacts.Some suggerire di utilizzare loop.SO ora sto usando loop per inviare sms a MultiContact.

Dopo aver inviato ciascun sms, li scrivo nella tabella inviata.

ContentValues values = new ContentValues(); 
    values.put("address", mobNo); 
    values.put("body", msg); 
    getContentResolver().insert(Uri.parse("content://sms/sent"), values); 

Ogni nuovo indirizzo creerà un nuovo ID di thread. Ad esempio se l'indirizzo del mio ricevitore è x, quindi l'id del thread 1, per l'id del thread y 2. E se voglio inviare sms a entrambi xey, allora come posso scrivere nella tabella sms/send. Se utilizzo Loop, non creerà alcun nuovo ID thread, poiché l'indirizzo di invio x ha già l'ID di thread 1 e y hanno già l'ID di thread 2.I messaggi verranno elencati con ID di thread 1 e 2 non crea mai un nuovo ID di thread .

ho cercato di manualy inserto filettato id da

values.put("thread_id", 33); 

Ma poi i messaggi sotto nuovo thread id non elencati in applicazione di default, ma nella mia app.

Please help me amici

Edit: Ho provato ad utilizzare 0, e poi la lettura del ID_Thread che è stato generato, quindi posizionare il prossimo sms con questa ID_Thread, fa ancora non funziona.

+0

quindi vuoi un thread separato separato anche se c'è già un thread per 1 e 2? – nandeesh

+0

@ Nandesh..sì ... L'app nativa funziona in modo simile ai thread – sarath

+0

, si basano su un singolo numero, non puoi definire un nuovo thread per 2 numeri. Dovrai creare la tua app e avere il tuo db se lo desideri a modo tuo. L'app nativa – nandeesh

risposta

13

È necessario creare manualmente un nuovo thread_id, un normale contentResolver.insert(...) non verrà eseguito per più messaggi di destinatari. Per creare il nuovo thread_id la tua ricerca il seguente URI

content://mms-sms/threadID

e ad essa aggiungere i soggetti necessari in modo che alla fine sembra che questo

content://mms-sms/threadID?recipient=9808&recipient=8808

Quindi l'esempio completo sarebbe simile a questa . Dicono che i destinatari sono 9808 e 8808

Uri threadIdUri = Uri.parse('content://mms-sms/threadID'); 
Uri.Builder builder = threadIdUri.buildUpon(); 
String[] recipients = {"9808","8808"}; 
for(String recipient : recipients){ 
    builder.appendQueryParameter("recipient", recipient); 
} 
Uri uri = builder.build(); 

Ora è possibile interrogare uri in modo normale e questo vi darà un thread_id che è possibile utilizzare per i destinatari specificati, si creerà un nuovo ID, se uno non lo fa esistere o restituire uno esistente.

Long threadId = 0; 
Cursor cursor = getContentResolver().query(uri, new String[]{"_id"}, null, null, null); 
if (cursor != null) { 
    try { 
     if (cursor.moveToFirst()) { 
      threadId = cursor.getLong(0); 
      } 
    } finally { 
      cursor.close(); 
    } 
} 

Ora utilizzare threadId per inserire gli SMS.

Alcune cose da notare.

Non utilizzare questo threadId per inserire messaggi unico destinatario sia per 9908 o 8808, creare un nuovo ID_Thread per ciascun o semplicemente fare un insert senza specificare il thread_id.

Inoltre, essere molto attenti con la parte builder.appendQueryParameter(...), assicurarsi che la chiave è recipient e non recipients, se si utilizza recipients esso continuerà a funzionare ma vi sarà sempre ottenere lo stesso thread_id e tutti i vostri SMS finirà in un thread .

+0

@vikki .. Grazie ... fammi controllare – sarath

+0

@vikki .... per tutte le conversazioni crea solo un thread id ... la mia chiave è solo il destinatario ... il mio snippet di codice è String [] recipients = to_nums.toArray (new String [to_nums.size()]) ;; per (Destinatario stringa: destinatari) { builder.appendQueryParameter ("destinatario", destinatario); } – sarath

+0

Non penso che tu stia usando correttamente ARR, se to_nums è una matrice di stringhe quindi basta iterare che non è necessario convertirlo in una stringa [], – vikki

0

Sembra che dovresti creare un nuovo thread per il messaggio di gruppo e inserirlo nel nuovo thread, nonché i singoli thread.

+0

Ciao..ho provato a inserire il nuovo id di thread da values.put ("id_file", 33); dopo di che posso elencare la conversazione di gruppo ma l'applicazione sms predefinita non elenca la conversazione con il nuovo threadid. – sarath

+0

Hai creato il nuovo thread utilizzando l'inseritore del content resolver e hai assegnato il suo ID nel messaggio? – tsmith

+0

Il seguente codice che ho usato per inserire gruppi sms..ContentValues ​​values ​​= new ContentValues ​​(); values.put ("indirizzo", mobNo); values.put ("body", msg); values.put ("thread_id", 33); getContentResolver(). Insert (Uri.parse ("content: // sms/sent"), valori); – sarath