Напишите отправленные sms в контент://sms/sent table

Я работаю над андроидным sms-приложением. Я могу отправить sms на один контакт, используя следующий код.

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

Теперь я хочу отправить sms в multicontacts.Some предложить использовать loop.SO сейчас я использую циклы для отправки sms для multicontact.

После отправки каждого sms я пишу эти значения в отправленную таблицу.

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

Каждый новый адрес создаст новый идентификатор потока. Например, если мой адрес получателя - x, то поток id 1, для y thread id 2. И если я хочу отправить sms как для x, так и y, тогда как я могу писать в sms/sent table. Если я использую Loop, то он не будет создавать никакого нового идентификатора потока, потому что адрес отправки x уже имеет идентификатор потока 1, а y уже имеет идентификатор потока. 2. Соевые сообщения, перечисленные в разделе thread id 1 и 2, никогда не создают новый идентификатор потока.

Я попытался вручную ввести идентификатор вставки

values.put("thread_id", 33);

Но тогда сообщения под новым идентификатором потока не отображаются в приложении по умолчанию, а в моем приложении.

Пожалуйста, помогите мне с друзьями

Изменить: я попытался использовать 0, а затем прочитав thread_id, который был сгенерирован, а затем поместите следующий sms с этим thread_id, все равно не работает.

Ответ 1

Вам нужно создать новый thread_id вручную, обычный contentResolver.insert(...) не будет использоваться для нескольких сообщений получателей. Чтобы создать новый thread_id, вы запрашиваете следующий uri

content://mms-sms/threadID

и к нему добавьте необходимых получателей, чтобы в итоге это выглядело как

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

Таким образом, полный пример будет выглядеть так. Скажем, что получатели 9808 и 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();

Теперь вы можете запросить uri обычным способом, и это даст вам thread_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();
    }
}

Теперь используйте threadId для вставки ваших SMS-сообщений.

Несколько замечаний.

Не используйте этот threadId для вставки сообщений одного получателя для 9908 или 8808, создайте новый thread_id для каждого или просто выполните insert без указания thread_id.

Кроме того, будьте очень осторожны с частью builder.appendQueryParameter(...), убедитесь, что ключ recipient, а не recipients, если вы используете recipients, он все равно будет работать, но вы всегда будете получать те же thread_id и все ваши SMS-сообщения попадут в один поток.

Ответ 2

Похоже, вы должны создать новый поток для группового сообщения и вставить его в новый поток, а также отдельные потоки.