2012-09-03 15 views
11

私はAndroidのSMSアプリケーションで作業しています。次のコードを使用して、単一の連絡先にSMSを送信できます。コンテンツに送信されたSMSを書き込む:// sms/sent table

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

は今、私は今、私はマルチコンタクトにSMSを送信するために、ループを使用していますloop.SOを使用することをお勧めmulticontacts.SomeにSMSを送信します。

各SMSを送信した後、私はそれらの値を送信テーブルに書き込みます。

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

すべての新しいアドレスが新しいスレッドIDを作成します。 たとえば、受信者のアドレスがxの場合は、スレッドID 1、スレッドIDが2の場合。2. SMSをxとyの両方に送信する場合は、どのようにSMS /送信テーブルに書き込むことができますか。 ループを使用すると、新しいスレッドIDは作成されません。送信アドレスxにはすでにスレッドID 1があり、yにはすでにスレッドID 2があります。したがって、メッセージはスレッドID 1にリストされ、2は新しいスレッドID 。

私は

values.put("thread_id", 33); 

により、インサートスレッドIDをてmanualyしようとしたが、その後、新しいスレッドIDの下のメッセージは、デフォルトのアプリではなく、私のアプリに記載されていません。

友人に

編集を助けてください。私は0を使用してみました、その後、生成されたなthread_idを読んで、このthread_idはして次のSMSを置いて、まだない作品を行います。

+0

したがって、1と2のスレッドが既に存在していても、個別に結合されたスレッドが必要ですか? – nandeesh

+0

@ Nandesh..yes..Nativeアプリは、 – sarath

+0

というスレッドが正確に同じもので、1つの数値に基づいているため、2つの数値の新しいスレッドを定義することはできません。あなたは自分のアプリを作って自分のdbを持っていなければならないでしょう – nandeesh

答えて

13

新しいthread_idを手動で作成する必要があります。contentResolver.insert(...)は、複数の受信者メッセージに対しては通常行われません。あなたが最終的にそれがこの

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

のように見えるので、完全な例は次のようになりますように、次のURI

content://mms-sms/threadID

、それには、必要な受信者を追加クエリthread_id新しいを作成するには。 1がない場合は、通常の方法でuriを照会することができ、受信者は9808と今

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

8808をしていると言うと、これはあなたが指定した受信者のために使用することができますthread_idを与えるだろう、それは新しいIDを作成します。存在するか、既存のものを返す。

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

ここでSMSを挿入するにはthreadIdを使用してください。

注意すべき点がいくつかあります。

9908または8808のいずれかのために単一の受信者のメッセージを挿入するごとに新しいなthread_idを作成するか、単にthread_idを指定せずにinsertを行うには、このthreadIdを使用しないでください。

また、builder.appendQueryParameter(...)一部に非常に注意してください、あなたはそれはまだ動作しますrecipientsを使用する場合、キーは、recipientないrecipientsであることを確認していますが、常に1つのスレッドで終わるだろうと同じthread_idし、すべてのSMSのを取得します。

+0

@vikki ..おめでとうございます... – sarath

+0

@vikkiをチェックさせてください。すべての会話のために、ただ1つのスレッドIDを作成します。私の鍵は受信者のみです...私のコードスニペットは文字列です[]受信者= to_nums.toArray(new String [to_nums.size()]);; (文字列受信者:受信者){ builder.appendQueryParameter( "recipient"、recipient); } – sarath

+0

to_numsが文字列の配列であり、それを文字列[]に変換する必要がないことを繰り返した場合、toArnoを適切に使用しているとは思いません。 – vikki

0

グループメッセージ用に新しいスレッドを作成し、それを新しいスレッドと個々のスレッドに挿入する必要があるようです。

+0

こんにちは..私はvalues.put( "thread_id"、33);によって新しいスレッドidを入れようとしました。その後、私はグループの会話をリストすることができますデフォルトのSMSアプリは新しいスレッドIDで会話をリストしていません。 – sarath

+0

コンテンツリゾルバーの挿入を使用して新しいスレッドを作成し、そのIDをメッセージに割り当てましたか? – tsmith

+0

次のコードは、グループsms..ContentValues values = new ContentValues()に挿入するために使用しました。 values.put( "address"、mobNo); values.put( "body"、msg); values.put( "thread_id"、33); getContentResolver()。insert(Uri.parse( "content:// sms/sent")、values); – sarath

関連する問題