2016-11-08 2 views
0

Для приложения для измерения скорости мне нужно каждые пять секунд получать широту и долготу. Я использовал функцию сна между двумя вызовами функций getLatitude и getLongitude. Но печать на экране показывает, что значение остается тем же, что и lon1 и lon2, так как удваивает (14 мест после десятичного) имеет точно такое же значение и, следовательно, скорость тоже отображается 0.получить местоположение широты после фиксированного интервала

Как получить Широта и долгота после фиксированного интервалы времени (4 секунды здесь)? Большое спасибо заранее.

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
 

 
     locationListener = new LocationListener() 
 
     { 
 
      @Override 
 
      public void onLocationChanged(Location location) { 
 
       double r = 6371; 
 
       double lat1 = location.getLatitude(); 
 
       double lon1 = location.getLongitude(); // To get initial longitude 
 
       SystemClock.sleep(4000);    /////This seems ineffective. 
 
       double lat2 = location.getLatitude(); 
 
       double lon2 = location.getLongitude(); // and here 
 
       double dlat = (lat2-lat1)*22/7/180; 
 
       double dlon = (lon2-lon1)*22/7/180; 
 
       
 
       textView.append("lon1:"+lon1+" lon2:"+lon2+" Kmph\n"); 
 
       lat1 = lat1*22/7/180; 
 
       lat2 = lat2*22/7/180; 
 
       double h = ((1-Math.cos(dlat))/2) + Math.cos(lat1)*Math.cos(lat2)*(1-Math.cos(dlon))/2; 
 
       double d = 2**Math.asin(Math.sqrt(h)); 
 
       double sp = d/3; 
 
       textView.append(" "+ sp + " Kmph\n"); 
 
      } 
 

 
      
 

 
      @Override 
 
      public void onStatusChanged(String s, int i, Bundle bundle) { 
 

 
      } 
 

 
      @Override 
 
      public void onProviderEnabled(String s) { 
 

 
      } 
 

 
      @Override 
 
      public void onProviderDisabled(String s) { 
 
       Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
 
       startActivity(intent); 
 
      } 
 
     }; 
 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ 
 
      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
 
       requestPermissions(new String[]{ 
 
         Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION, 
 
         Manifest.permission.INTERNET 
 
       },10); 
 
       return; 
 
      } 
 
     }else { 
 
      configureButton(); 
 
     } 
 

 
    } 
 

 
    @Override 
 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
 
     switch (requestCode) { 
 
      case 10: 
 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) 
 
        configureButton(); 
 
       return; 
 
     } 
 
    } 
 

 
    private void configureButton() { 
 
     button.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View view) { 
 
       locationManager.requestLocationUpdates("gps", 4000, 0, locationListener); 
 
      } 
 
     }); 
 

 
    } 
 
}

+0

вы можете смотреть на это просто изменить 30 до 4 http://stackoverflow.com/questions/39314901/getting-latitude-and-longitude-in-30-seconds – Saveen

+0

Спасибо, но это не помогает в получение текущих и предыдущих значений широты и долготы. – Mani

+0

полезно для получения текущих значений, но почему вам нужны предыдущие значения? – Saveen

ответ

0

Эй я не уверен, но вы ищете что-то вроде этого Надеюсь, что это поможет вам.

float oldlat, oldlng; 
    float currentLat, currentLng; 


    // Use this in location changed 
    currentLat = (float) location.getLatitude(); 
    currentLng = (float) location.getLongitude(); 

    final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 

     oldlat = (float) location.getLatitude(); 
     oldlng = (float) location.getLongitude(); 

    } 
    }, 4000); 
Смежные вопросы