Я пытаюсь добиться чего-то похожего на приложение «Найти мой телефон», то есть отправить SMS на мой телефон и получить ответ по SMS с указанием, где находится мой телефон. Требование этого приложения является открытым исходным кодом.
Я видел, что такое приложение уже существует в репозитории F-Droid и называется FindMyPhone. Однако, когда телефон получает SMS, его ответ просто отображается в стандартном приложении для обмена сообщениями в качестве ответа на контакт, но фактически не отправляется. Это не ожидаемое поведение, и я мог видеть в репозитории кода, что автор пытался исправить это, но затем сдался в 2013 году.
Я просмотрел код и увидел, что техника, которую он использует, проста:
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();
}
Этот код выполняется в классе, реализующем LocationListener, вызываемом службой внутри нового потока.
Любая подсказка о причине такого поведения? Почему сообщение просто отображается, но не отправляется? Я просмотрел другое подобное приложение: https://f-droid.org/repository/browse/?fdid=com.teamdc.stephendiniz.autoaway
Это работает нормально и отвечает на SMS, как и ожидалось. Его основное отличие состоит в том, что это приложение работает в службе, постоянно прослушивая новые сообщения и регистрируя получателя на лету, а не объявляя его в манифесте. Для меня это не будет иметь большого значения, но я бы предпочел, чтобы служба не работала постоянно.
Заранее спасибо за любую помощь в этом.