現在地の詳細(緯度と経度)を定期的にサーバーに送信する必要があります(例:5分ごと)。最善の方法はありますか?現在地を取得する方法と詳細をサーバーに送信する方法を知っています。しかし、これを定期的に繰り返すにはどうすればよいですか?
BroadcastReceiver を使用すると、定期的なリクエストを送信するのに適しています。
ここ はBroadcastReceiverを使用するためのチュートリアルです。
AlarmManager
を使用してサービスをウェイクアップし、サーバーに到達した場所を投稿するための最良の方法。
私はサービスで10秒と15秒で一日中携帯電話の位置を取得するアプリケーションを開発しています。それは正常に動作しますが、ネットワークプロバイダーリスナーのメソッドOnLocationChangedが呼び出されなくなることがあります。
import Android.location.Address;
import Android.location.Geocoder;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.view.View;
import Android.widget.AdapterView;
import Android.widget.ListView;
import Android.widget.SimpleCursorAdapter;
import Android.widget.TextView;
import Java.io.IOException;
import Java.util.List;
import foodinn.databases.LocationUpdaterDatabase;
public class LocationUpdatesActivity extends AppCompatActivity {
private LocationUpdaterDatabase locationUpdaterDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location_updates);
locationUpdaterDatabase = new LocationUpdaterDatabase(this, "Locations.db", null, 1);
final Geocoder geocoder = new Geocoder(this);
ListView listView = (ListView) findViewById(R.id.locationUpdatesListView);
listView.setAdapter(new SimpleCursorAdapter(this, R.layout.location_updates_list_view_view, locationUpdaterDatabase.getLocationUpdates(), new String[] {"latitude", "longitude", "whenUpdated"}, new int[] {R.id.listViewTextView1, R.id.listViewTextView2, R.id.listViewTextView3}, SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
double latitude = Double.valueOf(((TextView) view.findViewById(R.id.listViewTextView1)).getText().toString());
double longitude = Double.valueOf(((TextView) view.findViewById(R.id.listViewTextView2)).getText().toString());
try {
List<Address> addressList = geocoder.getFromLocation(latitude, longitude, 1);
String address = addressList.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
String city = addressList.get(0).getLocality();
String state = addressList.get(0).getAdminArea();
String country = addressList.get(0).getCountryName();
String postalCode = addressList.get(0).getPostalCode();
String knownName = addressList.get(0).getFeatureName();
((TextView) view.findViewById(R.id.listViewTextView4)).setText(address + ", " + city + ", " + country);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}