2013-12-10 151 views
0
public class WhereamI extends Activity { 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.activity_wheream_i); 

     LocationManager locationmanager; 
     String context = Context.LOCATION_SERVICE; 
     locationmanager = (LocationManager) getSystemService(context); 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_FINE); 
     criteria.setAltitudeRequired(true); 
     criteria.setBearingRequired(false); 
     criteria.setCostAllowed(true); 
     criteria.setPowerRequirement(Criteria.POWER_LOW); 

     String provider = locationmanager.getBestProvider(criteria, true); 
     Location location = locationmanager.getLastKnownLocation(provider); 
     updatewithnewlocation(location); 
     locationmanager.requestLocationUpdates(provider, 2000, 10, 
       locationlistener); 
    } 

    private final LocationListener locationlistener = new LocationListener() { 

     private Location location; 

     @Override 
     public void onStatusChanged(String provider, int status, 
       Bundle extras) { 
     } 

     @Override 
     public void onProviderEnabled(String arg0) { 
     } 

     @Override 
     public void onProviderDisabled(String arg0) { 
      updatewithnewlocation(null); 
     } 

     @Override 
     public void onLocationChanged(Location arg0) { 
      updatewithnewlocation(location); 
     } 
    }; 

    private void updatewithnewlocation(Location location) { 
     String latLongString; 
     TextView Text1; 
     Text1 = (TextView) findViewById(R.id.Text1); 
     if (location != null) { 
      double lat = location.getLatitude(); 
      double lng = location.getLongitude(); 
      double alt = location.getAltitude(); 
      latLongString = "Lat: " + lat + " Lon " + lng + " Altitude " 
        + alt + "feet"; 
     } else { 
      latLongString = "No Location Found: Sorry."; 
     } 
     Text1.setText("Your Current Position Is \n :" + latLongString); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.wheream_i, menu); 
     return true; 
    } 

} 

我寫了一個代碼,通過GPS查找我的設備的當前位置。問題是設備大多數時間沒有給出任何位置。但是,當我在代碼中進行一些更改並將更改(或啓動應用程序)上載到我的設備時,它會提供該位置。 這個應用程序的目的是找到位置的變化,並給予長期和緯度的價值,甚至altėude。我不知道該應用程序出了什麼問題。有人可以嗎?通過GPS尋找位置

+0

您並未檢查是否打開了最佳位置提供程序。如果它關閉,那麼你應該打開它,然後獲得位置。 –

+0

最初,如果您從未使用過GPS或網絡來獲取您的位置,那麼您將始終得到「找不到位置:對不起」。要獲得一個位置,現在必須將2000和10設置爲0,0否則,您將在20秒或5米位置更改後開始獲取位置。 –

回答

0

無論您使用GPS,NETWORK還是最好的提供商,所有工作都基於從本地(設備)緩存中獲取位置的相同原理。

試試這個實驗。改變你的實際位置(移動,距離你現在的位置約200米)並加載谷歌地圖,突然你的應用程序也會返回正確的座標。這是因爲谷歌地圖知道如何觸發本地緩存更新。在您啓動應用程序之後它爲您提供位置的原因是因爲您在代碼中使用requestLocationUpdate觸發本地緩存。因此,它給你的座標,直到它得到一個新的。

+0

請接受並關閉該問題是否對您有幫助 – user2511882