【发布时间】:2016-06-14 05:06:12
【问题描述】:
我想在一段时间后从我的 android 应用程序将位置数据发送到服务器。我使用 service 和 AlarmManager 在后台不断检查位置更新。
但我的问题是应用程序向服务器发送了太多数据;因此,当我在地图上看到这些位置数据时,它会在同一位置显示如此多的数据。我该如何解决这个问题?
这是我检查位置更新的最短时间和距离的代码部分。
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30000, 15, listener);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 15, listener);
使用minTime到30000 milliseconds和minDistance到15 meters安全吗?
- 如果可以,我应该如何只过滤相同的一个数据 地点?
- 如果不安全,我应该如何避免相同的位置数据?
我在下面添加了我的 LocationListener 代码。在这里,我正在检查最佳位置并将数据发送到服务器。
public class MyLocationListener implements LocationListener
{
public void onLocationChanged(final Location loc)
{
Log.i("**************************************", "Location changed");
if(isBetterLocation(loc, previousBestLocation)) {
loc.getLatitude();
loc.getLongitude();
intent.putExtra("Latitude", loc.getLatitude());
intent.putExtra("Longitude", loc.getLongitude());
intent.putExtra("Provider", loc.getProvider());
sendBroadcast(intent);
mySpeed = loc.getSpeed() * 1.94384449;
myKmph = loc.getSpeed() * 3.6;
myBearing = loc.getBearing();
double flat = loc.getLatitude(); //-32.827141
double flon = loc.getLongitude(); //139.667476
int inlat = (int) flat; //-32
int inlon = (int) flon; //139
float minlat = (float) (flat % 1) * 60; //10.371540000000152
float minlon = (float) (flon % 1) * 60; //
minlat = (minlat < 0) ? -minlat : minlat;
minlon = (minlon < 0) ? -minlon : minlon;
String norther = "N";
String souther = "S";
String easter = "E";
String wester = "W";
String northsouther = "";
String eastwester = "";
if(flat>=0.0) {
northsouther = norther;
}
else {
northsouther = souther;
}
if(flon>=0.0) {
eastwester = easter;
}
else {
eastwester = wester;
}
String text = "...my formate to send data...";
try {
String ip = "XX.XXX.XXX.XXX";
int port = XXXX;
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
Socket clientSocket = new Socket(ip, port);
DataOutputStream outToServer = new DataOutputStream(
clientSocket.getOutputStream());
outToServer.writeBytes(text);
clientSocket.close();
Log.d("LocationService", "Data sent successfully");
} catch (Exception e) {
Log.e("LocationService", "[Error] Either in Sending Data or the callback" + e.toString());
}
}
}
public void onProviderDisabled(String provider)
{
Toast.makeText( getApplicationContext(), "Gps Disabled", Toast.LENGTH_SHORT ).show();
}
public void onProviderEnabled(String provider)
{
Toast.makeText( getApplicationContext(), "Gps Enabled", Toast.LENGTH_SHORT).show();
}
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
}
请建议我克服这种情况的可能方法?
提前致谢。
【问题讨论】:
标签: android service geolocation location