如何获得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(); } } 

  • GPS:NTP时间注入是如何工作的
  • 融合位置提供程序意外的行为
  • 在Android中testingGPS
  • 如何使用位置或加速度计或其他方式获得android应用程序的速度
  • android nGPS:根据磁场而不是gps或细胞三角测量获取位置
  • 在Android 4.0及以上版本中以编程方式打开和closuresGPS?
  • 更新requestLocationUpdates中的时间间隔
  • getlastknownlocation在我通过eclipse重新安装apk文件后总是返回null
  • 我有这个工作:

     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(); }