2015-12-20 1 views
-1

Я хочу, чтобы он был более точным в расчетах.Мне нужен более точный positon в моем местоположении теперь его как 24.0, и я хочу 24.1235152

Теперь как 24.0, но я хочу, чтобы это было 24.1234512563.

Я не знаю, что мне нужно изменить. Я пытался изменить с int на double, но он не работает.

import android.app.Activity; 
import android.content.Context; 
import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.Toast; 

public class ShowLocationActivity extends Activity implements LocationListener { 
    private TextView latituteField; 
    private TextView longitudeField; 
    private LocationManager locationManager; 
    private String provider; 


    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_show_location); 
     latituteField = (TextView) findViewById(R.id.TextView02); 
     longitudeField = (TextView) findViewById(R.id.TextView04); 

     // Get the location manager 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     // Define the criteria how to select the locatioin provider -> use 
     // default 
     Criteria criteria = new Criteria(); 
     provider = locationManager.getBestProvider(criteria, false); 
     Location location = locationManager.getLastKnownLocation(provider); 

     // Initialize the location fields 
     if (location != null) { 
      System.out.println("Provider " + provider + " has been selected."); 
      onLocationChanged(location); 
     } else { 
      latituteField.setText("lokalizacja nie dostępna"); 
      longitudeField.setText("lokalizacja nie dostępna"); 
     } 
    } 

    /* Request updates at startup */ 
    @Override 
    protected void onResume() { 
     super.onResume(); 
     locationManager.requestLocationUpdates(provider, 400, 1, this); 
    } 

    /* Remove the locationlistener updates when Activity is paused */ 
    @Override 
    protected void onPause() { 
     super.onPause(); 
     locationManager.removeUpdates(this); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     double lat = (long) (location.getLatitude()); 
     double lng = (long) (location.getLongitude()); 
     latituteField.setText(String.valueOf(lat)); 
     longitudeField.setText(String.valueOf(lng)); 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     Toast.makeText(this, "Enabled new provider " + provider, 
       Toast.LENGTH_LONG).show(); 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     Toast.makeText(this, "Disabled provider " + provider, 
       Toast.LENGTH_LONG).show(); 
    } 

ответ

4

Вопрос очень unprecise, но ваша проблема кажется довольно очевидным: Вы делаете очень странный оттенок здесь:

double lat = (long) (location.getLatitude()); 
double lng = (long) (location.getLongitude()); 

Почему вы бросили это долго? Там вы теряете свою точность.

Я предполагаю, что .getLatitude() и .getLongitute() возвращают double, как 24,123. Теперь вы добавили это значение в long, которое превращает его только в . И теперь, когда переменная вы назначаете значение типа типа double, вы преобразовываете в 24.000.

+0

Я думал, что долго будет лучше, чем int. И еще информация будет отображаться на моем экране. То, что я хочу достичь, является более точной позицией, такой как 24.xxxxxx, теперь у меня есть 24.0 и nothink больше –

+0

@DominikZalewski прочитал мое Редактировать, я добавил объяснение. – PKlumpp

+0

Thx много :) теперь я понимаю :) –

Смежные вопросы