Опитвам се да постигна нещо подобно на приложение „Намерете моя телефон“, тоест да изпратя 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();
}
(връзка към кода в sourceforge)
Този код се изпълнява в клас, изпълняващ LocationListener, извикан в нова нишка от услуга.
Някакъв намек за причината за това поведение? Защо съобщението просто се показва, но не се изпраща? Погледнах в друго подобно приложение: https://f-droid.org/repository/browse/?fdid=com.teamdc.stephendiniz.autoaway
Това работи добре и отговаря на SMS-ите според очакванията. Основната му разлика е, че това приложение работи в услуга, която непрекъснато слуша за нови съобщения и регистрира приемника в движение, вместо да го декларира в манифеста. За мен това няма да е голяма работа, но бих предпочел услугата да не работи винаги.
Благодаря предварително за всяка помощ по този въпрос.