我正在尝试实现类似于“查找我的手机”应用程序的功能,即向我的手机发送短信并通过短信接收回复,告诉我手机的位置。此应用程序的要求是开源的。
我已经看到这种应用程序已经存在于 F-Droid 存储库中,称为 FindMyPhone。但是,当手机收到短信时,它的回复只是在股票消息应用程序中显示为对联系人的回复,但没有有效发送。这不是预期的行为,我可以在代码存储库中看到作者尝试纠正这个问题,然后在 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 的类中执行,由 Service 在新线程内调用。
关于这种行为原因的任何提示?为什么消息只显示但没有发送?我查看了另一个类似的应用程序:https ://f-droid.org/repository/browse/?fdid=com.teamdc.stephendiniz.autoaway
这工作正常,可以按预期回复短信。它的主要区别在于,这个应用程序运行在一个服务中,不断地监听新消息并动态注册接收者,而不是在清单中声明它。对我来说,这没什么大不了的,但我宁愿不让服务始终运行。
提前感谢您对此的任何帮助。