2011-12-04 27 views
3

我想通過GPS在我的程序中獲取我手機的當前位置。我的Android程序中的GPS座標不準確

問題是,要麼座標不準確(只有度數)或沒有給出位置。我現在編寫了我的第三個程序,每個程序都有一個不同的教程,但它不起作用,因爲它應該在那裏工作。

用途,權限設置,所以這是不是問題的答案;)

因此,這裏是我的代碼:

public class GpsActivity extends Activity{ 

private TextView latituteField; 
private TextView longitudeField; 
private TextView dateField; 
private TextView timeField; 
private LocationManager locationManager; 
private String provider; 
private LocationListener listener; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    latituteField = (TextView) findViewById(R.id.TextView02); 
    longitudeField = (TextView) findViewById(R.id.TextView04); 
    dateField = (TextView) findViewById(R.id.tvdate); 
    timeField = (TextView) findViewById(R.id.tvtime); 
    GregorianCalendar g = new GregorianCalendar(); 
    g.setTimeInMillis(System.currentTimeMillis()); 

    DateFormat df = DateFormat.getInstance(); 
    Date d = df.getCalendar().getTime(); 
    dateField.setText(""+d.getDate()+"."+(d.getMonth()+1)+"."+(1980+d.getYear())); 
    timeField.setText(""+g.getTime().getHours()+"h "+g.getTime().getMinutes()+"m "+g.getTime().getSeconds()+"s"); 


    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    // Define the criteria how to select the locatioin provider -> use 
    // default 
    Criteria criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 

    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."); 
     int lat = (int) (location.getLatitude()); 
     int lng = (int) (location.getLongitude()); 

     latituteField.setText(""+lat+"//"+location.getAccuracy()); 
     longitudeField.setText(""+lng+"//"+location.getProvider()); 
    } else { 
     latituteField.setText("Provider not available"); 
     longitudeField.setText("Provider not available"); 
    } 
    listener = new MyLocationListener(); 
    locationManager.requestLocationUpdates("gps" ,10000L, 10.0f, listener); 

} 

class MyLocationListener implements LocationListener{ 
    public void onLocationChanged(Location location) { 
      // TODO Auto-generated method stub 
      if (location != null){ 
        latituteField.setText(("Lat: " + location.getLatitude())); 
        longitudeField.setText("LLong: " + location.getLongitude()); 
      } 
    } 
    public void onProviderDisabled(String provider) { 

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

謝謝回答!

Rene

回答

0

您可能只是一個微弱的信號。您可以使用android位置API來獲取大概位置。

確保你站在外面,並有一個自由的視野來獲得「好」的信號。不要站在建築物旁邊等,但即使你這樣做,你也不會得到準確的信號。手機GPS「針對節能而非精確度進行了優化。他們不會把你的手機上的太昂貴的芯片以及...

+0

除了Udo的答案,不要忘記你可以查詢位置修正的準確性...在這裏的準確性討論:http:// stackoverflow.com/questions/3052517/how-is-location-accuracy-measured-in-android – Basic