所以上周我的手机被盗了,并且关闭了wifi和移动数据,所以我无法使用它。 GPS也已关闭,但是如果手机没有互联网连接,则没有用。即使手机受到指纹保护,而且我的数据也很安全,但我还是会喜欢那部手机。考虑到这一点,我想到了一个主意。
如果我创建一个 Android应用,该应用将在我的(新)手机上在后台静默运行,并且绝对不执行任何操作,该怎么办?它要做的就是在手机收到的所有SMS中收听特定的字符串。 现在说我的新手机也被偷了(谈论运气不好)。我立即通过某人的电话拨打我的电话号码。如果电话仍处于打开状态并具有蜂窝连接,我将向该电话号码发送一个带有THAT字符串的SMS。 手机收到短信后,应用会立即接听并执行以下操作:
这样,我就知道手机在哪里,小偷也不知道发生了什么,因为一切都在默默进行,并且手机也被锁定了。我想用此应用程序介绍的主要内容是它不依赖于互联网连接。它只是相信一个事实,只有我知道某些字符串,并且该应用程序存在并且正在24/7运行。我知道这不适合公共使用,但适合个人使用,我想是这样。
我想问的是关于我应该采用哪种方法的建议?关于我应该添加的内容有什么建议吗?您是否曾经尝试过类似的方法,如果可以,可以与我分享您的经验吗?
谢谢!
答案 0 :(得分:0)
我已经完成了我的项目。希望对您有帮助。询问您是否不清楚。首先,您需要创建用于将短信接收到应用程序中的SMSReceiver类,该类扩展了广播接收器和SMSListener接口,以侦听SMS数据并将其传递给您所需的活动。
代码如下:
public class SmsReceiver extends BroadcastReceiver {
private static SmsListener mListener;
@Override
public void onReceive(Context context, Intent intent) {
Bundle data = intent.getExtras();
Object[] pdus = (Object[]) data.get("pdus");//pdus is the protocol of SMS data.
for(int i=0;i<pdus.length;i++){
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
String sender = smsMessage.getDisplayOriginatingAddress();
//You must check here if the sender is your provider and not another one with same text.
String messageBody = smsMessage.getMessageBody(); //SMS text data
mListener.messageReceived(messageBody);//Pass on the text to our listener.
}
}
public static void bindListener(SmsListener listener) {
mListener = listener;
}
public static void unbindListener() {
mListener = null;
}
public interface SmsListener {
void messageReceived(String messageText);
}
}
然后,您需要在清单文件中声明接收方。如下所示。
<receiver android:name=".SmsReceiver" android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
然后最后在您的活动中添加此代码以获取SMS数据。
public Pattern p = Pattern.compile("(|^)\\d{4}"); //It will detect 4 number OTP value.
SmsReceiver.bindListener(new SmsListener() {
@Override
public void messageReceived(String messageText) {
Log.d("MESSAGE TEXT",messageText);
if(messageText != null)
{
Matcher m = p.matcher(messageText);
if(m.find()) {
//Do your code here after your sms received.
}
else
{
//Do here if you want to trigger anyof sms received.
}
}
}
});
BroadcastReceiver始终侦听传入的SMS。如果无法在应用关闭或屏幕关闭状态下触发或始终运行问题,请查看此解决方案。
Keep broadcast receiver running after application is closed
已编辑
看看永无止境的一些工作场景。您所需要做的就是监视服务并在终止服务后重新启动。您还可以将服务状态存储为共享首选项。这里有一些永无止境的服务选项和工作代码。您可以在搜索中找到更多信息。
Android: keep Service running when app is killed
Creating a never ending background service in Android
希望这会有所帮助。