Я предлагаю использовать библиотеку: https://github.com/klinker41/android-smsmms
внедрить в Gradle
compile 'com.klinkerapps:android-smsmms:5.1.0'
Сначала создайте объект настроек со всей необходимой информацией для того, что выхотеть сделать.Если вы что-то не установили, то это просто будет установлено по умолчанию, и эта функция может не работать.Например, если вам нужно MMS, установите MMSC, прокси-сервер и порт, иначе вы будете каждый раз получать сообщение об ошибке.
Settings sendSettings = new Settings();
Далее присоедините этот объект настроек к отправителю
Transaction sendTransaction = new Transaction(mContext, sendSettings);
Now, create the Message you want to send
Message mMessage = new Message(textToSend, addressToSendTo);
mMessage.setImage(mBitmap); // not necessary for voice or sms messages
И тогда все, что вам нужно сделать, это отправить сообщение
sendTransaction.sendNewMessage(message, threadId)
Примечание: threadId может быть аннулирован (используя Transaction.NO_THREAD_ID), но это иногда приводит к созданию нового потока вместодобавляемое сообщение в существующую ветку
Если вы хотите отправлять MMS-сообщения, обязательно добавьте это в свой манифест:
<service android:name="com.android.mms.transaction.TransactionService"/>
Пример функции:
public void sendMessage() {
new Thread(new Runnable() {
@Override
public void run() {
com.klinker.android.send_message.Settings sendSettings = new com.klinker.android.send_message.Settings();
sendSettings.setMmsc(settings.getMmsc());
sendSettings.setProxy(settings.getMmsProxy());
sendSettings.setPort(settings.getMmsPort());
sendSettings.setUseSystemSending(true);
Transaction transaction = new Transaction(MainActivity.this, sendSettings);
Message message = new Message(messageField.getText().toString(), toField.getText().toString());
if (imageToSend.isEnabled()) {
message.setImage(BitmapFactory.decodeResource(getResources(), R.drawable.android));
}
transaction.sendNewMessage(message, Transaction.NO_THREAD_ID);
}
}).start();
}