2011-06-22 106 views
0

我要讓應用這樣的座標:如何獲得用戶的GPS通過點擊一個按鈕

用戶點擊按鈕 應用程序顯示用戶的座標(經度和緯度)

我正在關注的步驟here

// Acquire a reference to the system Location Manager 
    LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE); 

    // Define a listener that responds to location updates 
    LocationListener locationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
      // Called when a new location is found by the network location provider. 
      double glat = location.getLatitude(); 
      double glong = location.getLongitude(); 
      Toast.makeText(getApplicationContext(), "Your position\n"+glat+"\n"+glong, Toast.LENGTH_LONG).show(); 
     } 
     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) {} 
     @Override 
     public void onProviderEnabled(String provider) {} 
     @Override 
     public void onProviderDisabled(String provider) {} 
     }; 

    // Register the listener with the Location Manager to receive location updates 
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 

如何實現它到按鈕點擊事件?

如果用戶點擊該按鈕時,敬酒出現顯示位置:)

UPDATE

我使用startActivityForResult()實現它,但結果爲空或空 這裏是我的代碼:

這是我想點擊按鈕的代碼

btn_obj_useKor.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) {    
    Intent intent = new Intent(getApplicationContext(), MyLocationListener.class); 
    startActivityForResult(intent, 0); 
    } 
}); 

,這是我MyLocationListener類:

public class MyLocationListener extends Activity{ 

    Intent intent; 
    String output = ""; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Intent intent = getIntent(); 

     LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE); 

     LocationListener locationListener = new LocationListener() { 
      @Override 
      public void onLocationChanged(Location location) { 
       double glat = location.getLatitude(); 
       double glong = location.getLongitude(); 
       output = glat+","+glong;     
      } 
      @Override 
      public void onStatusChanged(String provider, int status, Bundle extras) {} 
      @Override 
      public void onProviderEnabled(String provider) {} 
      @Override 
      public void onProviderDisabled(String provider) {} 
     }; 

     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 

     intent.putExtra("returnedData", output); 
     setResult(RESULT_OK, intent); 
     finish(); 
    } 

} 

當我點擊它顯示WTF按鈕!這意味着結果爲空或空。

什麼問題,我該怎麼做呢?

回答

0

它不會立即返回結果,因爲GPS提供者需要時間來啓動並找到您的位置。這就是爲什麼你要聽一個回調事件。

當前您的代碼正在監聽網絡位置,這不是很準確。如果已啓用GPS,則將LocationManager更改爲GPS_Provider(位於最後一行)以使用GPS。

0

響應onClick是一個用戶事件,LocationListener onLocationChanged也是一個事件。如果在LocationListener事件之前觸發用戶事件,則不會顯示可用的位置。

我的建議是調用startActivityForResult在按鈕的onClick處理程序的另一項活動,第二個活動已全部在它的LocationManager & LocationListener的代碼,在你傳遞的位置回到第一活動onLocationChanged事件處理程序。