如何获得GPS位置的Android

我想有一个恒定的GPS侦听器,将每x分钟将其位置(长和纬度坐标)发送到Web服务器。 在一个button上单击它也将它的位置发送到networking服务器。 我意识到要获得gps信号,你需要多长时间一次find一个位置,但是如何编写一个能够获得gps位置的程序,并且每隔x分钟就发送一次坐标(即使在没有背景的情况下也可以通过button按下?

/ /在点击

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, whatshouldIputhere?, 0, this); 

 public void onLocationChanged(Location location) { if (location != null) { double lat = location.getLatitude(); double lng = location.getLongitude(); } } 

我有这个工作:

 private void _getLocation() { // Get the location manager LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); String bestProvider = locationManager.getBestProvider(criteria, false); Location location = locationManager.getLastKnownLocation(bestProvider); try { lat = location.getLatitude(); lon = location.getLongitude(); } catch (NullPointerException e) { lat = -1.0; lon = -1.0; } } 

这很简单。 它获得最好的可用提供者并获得最后的已知位置。
如果你只想用GPS,试试这个 。

希望能帮助到你!

编辑:

尝试这个:

 private void _getLocation() { // Get the location manager LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); String bestProvider = locationManager.getBestProvider(criteria, false); Location location = locationManager.getLastKnownLocation(bestProvider); LocationListener loc_listener = new LocationListener() { public void onLocationChanged(Location l) {} public void onProviderEnabled(String p) {} public void onProviderDisabled(String p) {} public void onStatusChanged(String p, int status, Bundle extras) {} }; locationManager .requestLocationUpdates(bestProvider, 0, 0, loc_listener); location = locationManager.getLastKnownLocation(bestProvider); try { lat = location.getLatitude(); lon = location.getLongitude(); } catch (NullPointerException e) { lat = -1.0; lon = -1.0; } } 

此代码获取最后一个已知位置,然后请求实际位置。

一种方法是使用TimerTimerTask

 Timer timer = new Timer(); timer.scheduleAtFixedRate(new SendLocationTask(), 0, 60000); class SendLocationTask extends TimerTask{ public abstract void run(){ // send position info here } } 

有多种方法可以使用。 您可以使用单独的线程等待x分钟,然后将最新的已知位置发送到服务器。 或者你使用一个差不多相同的服务。 作为第三种可能性,你也可以使用Handler 。

你可以创build一个线程,在后台运行,每x分钟你就可以通过调用一个函数来获得实际的位置(注意,你想创build一个获得x,y坐标的函数,因为你将在button点击还有)。 对于您发布的代码:

 locationManager.requestUpdates(provider, minTime, minDistance, intent); 

这意味着你的应用程序会每隔x分钟向gps模块发送一个请求,告诉whatshouldIputhere?

祝你好运,Arkde

此代码适用于我(api 17)

 try { if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); lat = location.getLatitude(); lon = location.getLongitude(); } } catch (Exception e){ e.printStackTrace(); }