远程位置访问应用

时间:2018-07-16 13:07:23

标签: android gps location sms cellular-network

所以上周我的手机被盗了,并且关闭了wifi和移动数据,所以我无法使用它。 GPS也已关闭,但是如果手机没有互联网连接,则没有用。即使手机受到指纹保护,而且我的数据也很安全,但我还是会喜欢那部手机。考虑到这一点,我想到了一个主意。

如果我创建一个 Android应用,该应用将在我的(新)手机上在后台静默运行,并且绝对不执行任何操作,该怎么办?它要做的就是在手机收到的所有SMS中收听特定的字符串。 现在说我的新手机也被偷了(谈论运气不好)。我立即通过某人的电话拨打我的电话号码。如果电话仍处于打开状态并具有蜂窝连接,我将向该电话号码发送一个带有THAT字符串的SMS。 手机收到短信后,应用会立即接听并执行以下操作:

  1. 打开GPS。
  2. 锁定其位置。
  3. 开始发送自己的坐标到从接收短信的号码 通过短信每分钟一次的速率。

这样,我就知道手机在哪里,小偷也不知道发生了什么,因为一切都在默默进行,并且手机也被锁定了。我想用此应用程序介绍的主要内容是它不依赖于互联网连接。它只是相信一个事实,只有我知道某些字符串,并且该应用程序存在并且正在24/7运行。我知道这不适合公共使用,但适合个人使用,我想是这样。

我想问的是关于我应该采用哪种方法的建议?关于我应该添加的内容有什么建议吗?您是否曾经尝试过类似的方法,如果可以,可以与我分享您的经验吗?

谢谢!

1 个答案:

答案 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

希望这会有所帮助。