アンドロイドアプリから一定時間後にサーバーに位置情報を送信します。私は、サービスとAlarmManagerを使用して、バックグラウンドでロケーション更新を継続的にチェックしました。アンドロイドで場所の更新を確認しながら同じ場所を避ける
しかし、私の問題は、アプリケーションがサーバーに送信するデータが多すぎることです。地図上にその場所のデータが表示されている間、同じ場所に非常に多くのデータが表示されます。どうすればこの問題を解決できますか?
ここでは、場所の更新を確認するための最小時間と距離を確認したコードの部分を示します。
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30000, 15, listener);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 15, listener);
は安全が15 meters
し30000 milliseconds
とminDistance
にminTime
を使用することですか?
- OKの場合、同じ の1つのデータのみをどのようにフィルタリングする必要がありますか?
- 安全でない場合、どのように同じ位置情報を避けるべきですか?
下記の私の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)
{
}
}
この状況を克服する方法を教えてください。
ありがとうございます。
((loc2_lat == nullの|| loc2_lat == 0.0) &&(loc2_long == nullの|| loc2_long == 0.0))場合は、チェックした理由を教えてくださいすることができ、なぜ私がいるかどうかを確認する必要があり(calculated_distance> 15)もう一度?私はすでに、この1つのlocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER、30000、15、listener)によって15メートルのデータをチェックしました。どの場所の正確なデータを取得するのが安全かどうか尋ねました。 – anuradha