我正在构建一个 android 应用程序,它 1.Tracks 使用 GPS 跟踪手机位置并将其存储为文件 2.当手机离开指定区域时,它会向一个号码发送 SMS。
我已经使用 commonsware 实现了第一个,Locationpoller但我想知道如何实现第二个。
如何在地图上选择特定区域?当手机不在该区域时如何创建警报(或事件)?
我正在构建一个 android 应用程序,它 1.Tracks 使用 GPS 跟踪手机位置并将其存储为文件 2.当手机离开指定区域时,它会向一个号码发送 SMS。
我已经使用 commonsware 实现了第一个,Locationpoller但我想知道如何实现第二个。
如何在地图上选择特定区域?当手机不在该区域时如何创建警报(或事件)?
实施
It sends a SMS to a number when the phone goes out of a specified area.
您可以决定相对于您在地图上当前位置的半径,例如 5 公里。现在您将当前位置存储在共享首选项中。实施服务。使用位置监听器。因此,当调用onLocationChanged()时,您可以计算新位置与共享首选项中存储的位置之间的距离。如果它超出了您决定的区域,则发送短信。
可能会奏效。
编辑:因为你的人拒绝发布任何代码,我找到了一些。以下是使用 Android 2.2 及更高版本以编程方式发送短信的方法,如果您无法确定用户的位置,我也会写一些内容供您参考:
import android.app.Activity;
import android.os.Bundle;
import android.app.PendingIntent;
import android.content.Intent;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
Button btnSendSMS;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnSendSMS = (Button) findViewById(R.id.btnSendSMS);
btnSendSMS.setOnClickListener(new
View.OnClickListener() {
public void onClick(View v) {
sendSMS(System.getProperty("numberToSendTo"), “Hello my friends!”);
}
});
}
//---sends an SMS message to another device---
private void sendSMS(String phoneNumber, String message) {
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, null, null);
}
}
有多种方法可以指定地理区域:
一些常见的场景:
1)最简单的:一个有圆心和半径的圆。
2) 轴平行矩形
3) 一个(闭合的)多边形
对于所有这些,您
- 将这些区域的坐标存储为纬度/经度坐标对。
从 Gps 修复到修复您检查isIside(area)状态;当它从外到内变化时,它是一个“EnterArea”,如果它从内到外变化,它是一个LeaveArea。
一旦检测到 LeaveArea,就发送 SMS。
剩下的就是如何计算isInside(area):
对于圆形:内部 =if (distanceMeters(currentPoint, circleCenter) <= radiusMeters)
对于矩形:每个移动平台都有一个点在矩形方法中。
对于多边形:使用来自互联网的 pointInPolygon()。
对于内部矩形和多边形:您可以使用原始 GPS (WGS84) 坐标进行计算。
对于内圈:distanceMeters. 每个平台都提供一种方法来计算两个纬度/经度坐标之间的距离。