Итак, я делаю приложение для Android, которое может отправлять SMS-сообщения несколько раз с интервалами между количеством сообщений. Это частично работает, но иногда это не так. Например, когда я ввожу 20 msgs для отправки, он отправляет 16 или, может быть, немного больше. Также, когда я нажимаю кнопку, она зависает до тех пор, пока она не закончит отправку SMS'а. Так или иначе, кто-то может сказать мне, что не так с моим кодом? Я пробовал несколько исправлений, которые не работают очень хорошо, и я думал, что приеду сюда за помощью после многих неудачных попыток. PS там больше кода, но это то, где проблема остается. Спасибо за чтение EDIT: FIXED!Android Отключенный код отправки SMS
ответ
Кнопка «замерзает», потому что поток пользовательского интерфейса отправляет все 20 SMS, прежде чем он освободится, чтобы делать другие вещи.
Я бы посмотрел AsyncTask. Это способ Android легко прорисовать. По сути, что бы вы сделали, это создаст новый поток в фоновом режиме с помощью AsyncTask. Это освобождает поток пользовательского интерфейса, чтобы он выглядел так, как будто все нормально для пользователя (без замораживания), в то время как AsyncTask выполняет всю работу в фоновом режиме с помощью doInBackground
. Затем, когда Задача выполнена, используйте onPostExecute
, чтобы уведомить пользовательский интерфейс, что это сделано, и, возможно, рассказать пользователю что-то. Вы поместили бы вызов MyAsyncTask.execute(smsDataHere)
в onClick.
Эта ссылка на AsyncTask достаточно проста для простых целей и имеет пример кода.
Я не уверен точно почему он отправляет только 16 сообщений, но я сразу вижу, что вам не хватает фигурных скобок и что они не совсем совпадают с тем, как вы их хотите к. Я бы посмотрел туда первым. Кроме того, есть ли причина для второго цикла for
? size
всегда 1, поэтому он просто отправляет каждое сообщение дважды.
EDIT: Вот пример кода. Я не собираюсь обещать, что он работает в вашем точном приложении, но он покажет вам, как работает AsyncTask и дает вам отправную точку. Я также пытался решить любые проблемы с фигурными фигурными скобками и немного очистился. Я по-прежнему рекомендую просмотреть документацию, чтобы убедиться, что вы понимаете, как она работает. Я надеюсь, это поможет вам.
public void onClick(View v){
String phoneNo = putpn.getText().toString();
String message = txtMessage.getText().toString();
String txts = txtAmount.getText().toString();
String inter = interval.getText().toString();
if (msgCount > 21){
Toast.makeText(getBaseContext(), "That is too many txts, the max is 20", Toast.LENGTH_SHORT).show();
}
else{
MySmsTask.execute(phoneNo, message, txts, inter);
}
}
private class MySmsTask extends AsyncTask<String, Void, Integer> {
@Override
protected Integer doInBackground(String... messageData) {
int sentCount = 0;
int size = 1;
int delay = Integer.parseInt(messageData[3]);
int msgCount = Integer.parseInt(messageData[2]);
if (phoneNo.length()>0 && message.length()>0){
for (sentCount = 0; sentCount < msgCount; sentCount++) {
for (int i = 0; i < size; i++) {
sendSMS(messageData[0], messageData[1]);
Thread.sleep(delay * 1000);
}
}
}
return sentCount;
}
@Override
protected void onPostExecute(Integer result) {
Toast.makeText(getBaseContext(), "Sent " + sentCount + " messages", Toast.LENGTH_SHORT).show();
}
}
private void sendSMS(String phoneNumber, String message){
PendingIntent pi = PendingIntent.getActivity(this, 0,
new Intent(this, Object.class), 0);
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, null, null);
}
- 1. Задержка отправки SMS ANDROID
- 2. Как понять код отправки SMS?
- 3. Статус отправки SMS на Android
- 4. Автоматизация тестирования отправки отправки sms
- 5. Измерьте скорость отправки SMS
- 6. Фоновый процесс отправки SMS
- 7. Android - определение причин сбоя отправки SMS
- 8. Android-сервер SMS-код подтверждения
- 9. Ошибка отправки SMS с намерением Android
- 10. Android 1.6 SMS (старый код приложения)
- 11. Android: отображение тоста после отправки SMS
- 12. менеджер SMS в Android, то результат отправки
- 13. Ошибка отправки приложения для отправки sms-сообщений Android
- 14. Включить отключенный edittext android
- 15. Защита отправки SMS
- 16. отправки SMS с Twilio
- 17. Обработка отправки SMS с помощью SMS Limit Popup?
- 18. sms manger используется для отправки нескольких SMS (групповых SMS)?
- 19. Как отфильтровать/Извлечь код из SMS (Android)
- 20. Android Получить SMS-код с услугой BroadCastReceiver
- 21. Простой php код для отправки Infobip sms на телефон
- 22. php mail() для отправки sms
- 23. Содержание SMS-контента Android (контент: // sms/sent)
- 24. Отладка Android - имитирует отключенный телефон
- 25. Android отключить услугу SMS
- 26. Android использовать SMS шлюз
- 27. Azure Аутентификация отправки SMS-подтверждения
- 28. API для отправки группы SMS
- 29. Пливо Массовые границы отправки SMS?
- 30. Отклонить активность SMS/экран после отправки смс в Android
OK Я попробую то, что вы предложили, и реализуйте Asynctask вместо Thread. также я получаю синтаксические ошибки там, но я запутался, потому что я не вижу ошибок, кроме скобок. – Kebob
Также могу попросить вас показать пример того, как я буду делать doInBackground (метод?)? и что именно я мог бы ввести в метод MyAsynctask? извините im действительно новый с java/android, и это мое первое приложение. – Kebob
также шаги, которые я думаю. 1.do a onPreExecute для индикатора выполнения 2.make класс MyAsyncTas (не знаю точно, что добавить сюда) 3.make doInBackground для запуска класса Async? 4. Затем позвоните (я не знаю, что бы я назвал здесь, doInBackground)? 5.run onPostExecute – Kebob