Отправка текстовых сообщений программно в android

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

Мое приложение имеет возможность отправлять один текст нескольким пользователям. Вот пример кода …

if(phoneNumbers.length > 0 && message.getText().toString().equals("") == false) { for(int i=0;i<phoneNumbers.length;i++) { sms = SmsManager.getDefault(); try { sms.sendTextMessage(phoneNumbers[i], null, message.getText().toString(), null, null); sentQuantity++; } catch(IllegalArgumentException e) { } } } 

В принципе, он просто просматривает массив телефонных номеров и отправляет текст по одному. Вот где часть моей проблемы. Если я выберу 3 или более номеров для отправки текста, иногда не все тексты действительно отправляются. Это происходит очень случайным образом.

Я предполагаю, что это связано с задержкой между отправкой каждого отдельного сообщения, но код не ждет достаточно долго. Я пришел к этому предположению, потому что, если я вхожу в программу с использованием eclipse и вручную просматриваю приложение, все всегда работает нормально.

Другая проблема заключается в отправке обновления состояния текстового сообщения на веб-сервер.

Сразу после отправки текстовых сообщений приложение затем подключается к Интернету и сообщает серверу через HTTP-почту количество отправленных текстов. Вот мой фрагмент интернет-кода …

 for(int i = 0; i < postNames.length; i++) { nameValuePairs.add(new BasicNameValuePair(postNames[i], postValues[i])); } //http post try{ HttpParams httpParameters = new BasicHttpParams(); int timeoutConnection = 10000; HttpConnectionParams.setConnectionTimeout(httpParameters,timeoutConnection ); HttpClient httpclient = new DefaultHttpClient(httpParameters); HttpPost httppost = new HttpPost(webAddress); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); 

Этот раздел только компилирует элементы для сообщения, подключается к веб-странице и отправляет сообщение. Ключ здесь – это 10-минутный тайм-аут соединения. Еще раз, как я уже говорил, подключение к Интернету происходит сразу же после отправки текстов. Итак, если я перехожу в режим отладки и вручную выполняю этот процесс, все работает нормально. Но если я просто запустил приложение на своем телефоне, я получу ошибку тайм-аута соединения.

Теперь я надеюсь, что, если я смогу уменьшить количество текстовых сообщений на один текст, независимо от количества получателей, это будет потрясающе. Я попытался отделить номера телефонов запятой, и это не сработало. Я также попытался выделить числа с помощью двоеточия (точно так же, как Microsoft Outlook или GMail позволяет добавлять нескольких получателей к электронной почте). Никто из них не работал для меня. У кого-нибудь есть предложения? Даже если есть совсем другой подход, это было бы оценено. О, и я не хочу использовать намерение Google Messaging отправлять сообщения, мне нужно использовать свое приложение.

Solutions Collecting From Web of "Отправка текстовых сообщений программно в android"

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

Если вам нужно отслеживать статус процесса отправки SMS-сообщений, вы можете фактически использовать два объекта PendingIntent вместе с двумя объектами BroadcastReceiver, например :

  //---sends an SMS message to another device--- private void sendSMS(String phoneNumber, String message) { String SENT = "SMS_SENT"; String DELIVERED = "SMS_DELIVERED"; PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0); PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0); //---when the SMS has been sent--- registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), "SMS sent", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(getBaseContext(), "Generic failure", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(getBaseContext(), "No service", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(getBaseContext(), "Null PDU", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(getBaseContext(), "Radio off", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(SENT)); //---when the SMS has been delivered--- registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), "SMS delivered", Toast.LENGTH_SHORT).show(); break; case Activity.RESULT_CANCELED: Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(DELIVERED)); SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); } 

Думаю, это то, что вам нужно. В приведенном ниже фрагменте предлагается ввести длинное сообщение и разделить его на части и отправить каждому из них индивидуально для данного контакта или даже для группы контактов

 public void sendLongSMS() { String phoneNumber = "0123456789"; String message = "Hello World! Now we are going to demonstrate " + "how to send a message with more than 160 characters from your Android application."; SmsManager smsManager = SmsManager.getDefault(); ArrayList<String> parts = smsManager.divideMessage(message); smsManager.sendMultipartTextMessage(phoneNumber, null, parts, null, null); } 

Сначала вы должны добавить разрешение в файл AndroidManifest.xml

 <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> 

Затем напишите этот код

 try { String ph="1234568790"; String msg="Haiii friend"; SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(ph, null,msg, null, null); Toast.makeText(MainActivity.this, "Message Sent", Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(MainActivity.this, "Message not Sent", Toast.LENGTH_LONG).show(); } 

Вы можете попробовать это

SmsManager.getDefault().sendTextMessage(phoneNUmber, null, messageToSend, null, null);

благодаря