我希望在android中每10秒钟后定期使用后台服务获取当前位置的纬度和经度。
答案 0 :(得分:0)
首先,您必须编写服务:
public class MyService extends Service {
Timer timer;
Handler yardimci;
public static long TIME = 10000;
private GPSControlService gpsControlService;
@Override
public void onCreate() {
super.onCreate();
gpsControlService = new GPSControlService(this) {
@Override
public void findLocationCompleted(Location location) {
Log.i("Service", location.getLatitude() + " - " + location.getLongitude() + " - " + location.getAccuracy());
}
};
timer = new Timer();
yardimci = new Handler(Looper.getMainLooper());
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Log.i("Service", "GPS controlled");
gpsControl();
}
}, 0, TIME);
}
private void gpsControl() {
yardimci.post(new Runnable() {
@Override
public void run() {
gpsControlService.run();
}
});
}
@Override
public void onDestroy() {
timer.cancel();
super.onDestroy();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
GPSControlService:
public class GPSControlService {
private GPSModule gpsModule;
public GPSControlService(Service service) {
gpsModule = new GPSModule(service);
}
public void run(){
if (gpsModule.canGetLocation()) {
if (gpsModule.getLocation() != null) {
findLocationCompleted(gpsModule.getLocation());
}
gpsModule.stopUsingGPS();
}
}
public void stop(){
gpsModule.stopUsingGPS();
}
public void findLocationCompleted(Location location){}
}
我需要写一个GPSModule 当植入LocationListener并找到位置时,它会使用getLocation()方法发送位置
public Location getLocation() {
// return location
}
答案 1 :(得分:0)
您可以使用位置监听器。
private class MyLocationListener implements LocationListener {
public void onLocationChanged(Location location) {
String message = String.format(
"New Location \n Longitude: %1$s \n Latitude: %2$s",
location.getLongitude(), location.getLatitude());
latitude = location.getLatitude();
longitude = location.getLongitude();
Toast.makeText(DirectionActivity.this, message,Toast.LENGTH_LONG).show();
}
public void onStatusChanged(String s, int i, Bundle b) {
Toast.makeText(DirectionActivity.this, "Provider status changed",
Toast.LENGTH_LONG).show();
}
public void onProviderDisabled(String s) {
Toast.makeText(DirectionActivity.this,
"Provider disabled by the user. GPS turned off",
Toast.LENGTH_LONG).show();
}
public void onProviderEnabled(String s) {
Toast.makeText(DirectionActivity.this,
"Provider enabled by the user. GPS turned on",
Toast.LENGTH_LONG).show();
}
}
你可以通过
来调用它 private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters
private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; // in Milliseconds
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_BETWEEN_UPDATES,
MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new MyLocationListener());
答案 2 :(得分:0)
可以编写后台服务来获取位置。但是不建议这样做,因为它会大大耗尽电池。
强烈建议在应用程序在前台运行时使用位置服务。
必须知道位置监听器如何工作?
有两个参数 - 一次和
其他最小距离得到位置。我们说时间= 10秒钟
距离= 1000米。位置监听器将返回最小参数的位置。如果用户未移动,该位置将在10秒内更新。如果用户在10秒内移动2000米,则位置将在每1000米处更新。