Я пытаюсь добиться чего-то похожего на приложение «Найти мой телефон», то есть отправлять SMS-сообщения на свой телефон и получать ответ по SMS, рассказывая, где находится мой телефон. Требование этого приложения является открытым исходным кодом.Автоматический ответ SMS от Android-приложения
Я видел, что этот вид приложения уже существует в репозитории F-Droid, называется FindMyPhone. Однако, когда телефон получает SMS, его ответ отображается в приложении обмена мгновенными сообщениями как ответ на контакт, но не отправляется эффективно. Это не ожидаемое поведение, и я мог видеть в коде хранилище, что автор пытался исправлять это, а затем дал в 2013 году
Я посмотрел в код и увидел, что метод он использует это straigthforward:
try {
SmsManager smsManager = SmsManager.getDefault();
// ********* SENDING SMS HERE *******
smsManager.sendTextMessage(currentFromAddress, null, txt, null, null);
// ********* SENDING SMS HERE *******
Log.d(FindMyPhoneHelper.LOG_TAG, "Sent SMS");
Thread.sleep(5000);
Log.d(FindMyPhoneHelper.LOG_TAG, "Slept 5000ms");
} catch(Exception e) {
Log.d(FindMyPhoneHelper.LOG_TAG, "Failed SMS: " + e.getMessage());
e.printStackTrace();
}
(link to the code in sourceforge)
Этот код выполняется в классе реализации LocationListener, названный в новой нити с помощью службы.
Любой намек на причину такого поведения? Почему сообщение отображается, но не отправляется? Я просмотрел другую аналогичную заявку: https://f-droid.org/repository/browse/?fdid=com.teamdc.stephendiniz.autoaway
Это нормально работает и отвечает на SMS-сообщения, как ожидалось. Основное его различие заключается в том, что это приложение работает в службе, которая постоянно прослушивает новые сообщения и регистрирует приемник «на лету», а не объявляет его в манифесте. Для меня это не будет большой проблемой, но я бы предпочел, чтобы сервис не работал.
Заранее благодарим за помощь.
Спасибо за ответ, но я боюсь, что это не причина моей проблемы: автоответ, приложение, которое правильно отправки SMS-сообщений, выполняет то же вызов sendTextMessage, передавая «нулевой» как центр обслуживания SMS. –
Регистры FindMyPhone реагируют на SMS_RECEIVED в манифесте. Реакция на самом деле происходит, но SMS отображается только в моем приложении для обмена сообщениями и в любом случае не отправляется. –
Я не мог сказать, почему он не отправляется, не глядя на журналы (adb logcat -b radio), но если он появляется в приложении обмена запасами как отправленное (отправленное, поставленное в очередь или не отправленное?), То это означает, что Android Framework сохранил его в базе данных SMS/MMS, и это происходит после того, как сообщение было отправлено (или не удалось отправить) в https://android.googlesource.com/platform/frameworks/opt/telephony/+/master/src /java/com/android/internal/telephony/SMSDispatcher.java#1408. – fejd