Я хочу отправить несколько смс. У меня есть цикл while, который читает из базы данных и передает идентификатор сообщения в приемник широковещательной передачи, отмечает сообщение как отправленное. Если я пытаюсь отправить несколько сообщений, широковещательная передача получает только идентификатор для первых сообщений, даже когда отправленное сообщение не является первым. Вы ожидаете, что широковещательный приемник получит идентификатор для соответствующих смс, но это не так. Как я могу это исправить?Android передает данные получателю радиопередачи не работает
while (cursor.moveToNext()) {
String _ID = cursor.getString(cursor.getColumnIndex(FeedContract.Entry._ID));
int triesCount = cursor.getInt(cursor.getColumnIndex(FeedContract.Entry.TRIES_COUNT));
triesCount += 1;
Intent smsSentIntent = new Intent(Constants.SMS_SENT_BROADCAST_NAME);
smsSentIntent.putExtra(FeedContract.Entry._ID, _ID);
smsSentIntent.putExtra(FeedContract.Entry.TRIES_COUNT, triesCount);
Intent smsDeliveredIntent = new Intent(Constants.SMS_DELIVERED_BROADCAST_NAME);
smsDeliveredIntent.putExtra(FeedContract.Entry._ID, _ID);
smsDeliveredIntent.putExtra(FeedContract.Entry.TRIES_COUNT, triesCount);
ArrayList<PendingIntent> sentPendingIntents = new ArrayList<>();
PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, smsSentIntent, 0);
ArrayList<PendingIntent> deliveredPendingIntents = new ArrayList<>();
PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0, smsDeliveredIntent, 0);
try {
SmsManager sms = SmsManager.getDefault();
ArrayList<String> mSMSMessage = sms.divideMessage(cursor.getString(cursor.getColumnIndex(FeedContract.Entry.SMS_BODY)));
for (int i = 0; i < mSMSMessage.size(); i++) {
sentPendingIntents.add(i, sentPI);
deliveredPendingIntents.add(i, deliveredPI);
}
sms.sendMultipartTextMessage(cursor.getString(cursor.getColumnIndex(FeedContract.Entry.RECIPIENTS)), null, mSMSMessage, sentPendingIntents, deliveredPendingIntents);
} catch (Exception e) {
e.printStackTrace();
}
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
cursor.close();
}
И на приемнике вещания у меня есть следующее.
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
String _ID = extras.getString(FeedContract.Entry._ID);
Toast.makeText(context, "Sent Message ID " + _ID, Toast.LENGTH_SHORT).show();
}
Спасибо, но ваш код получает тот же, если используется в цикле – sammyukavi