我正在构建一个 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
. 每个平台都提供一种方法来计算两个纬度/经度坐标之间的距离。