2013-08-16 59 views
0

我正在製作一個android工作室的應用程序,並在一個歡迎的彈出對話框中我希望應用程序獲取用戶的位置,所以我寫了代碼,但爲什麼找不到我的位置。爲什麼?!?我正在努力工作幾天。這裏是我的代碼爲什麼我不能得到我的位置?

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


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


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

    Criteria criteria = new Criteria(); 
    provider = locationManager.getBestProvider(criteria, true); 
    Log.d("SomeTag", provider); 
    Log.d("SomeTag", String.valueOf(locationManager.isProviderEnabled(provider))); 
    Location location = locationManager.getLastKnownLocation(provider); 


    if (location != null) { 
     System.out.println("Provider " + provider + " has been selected."); 
     onLocationChanged(location); 
    } else { 
     latituteField.setText("Please wait for location update..."); 
     longitudeField.setText("Please wait for location update..."); 
     addressField.setText("Please wait for location update..."); 
    } 
} 


@Override 
protected void onResume() { 
    super.onResume(); 
    locationManager.requestLocationUpdates(provider, 400, 1, this); 
} 


@Override 
protected void onPause() { 
    super.onPause(); 
    locationManager.removeUpdates(this); 
} 

@Override 
public void onLocationChanged(Location location) { 

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

    Geocoder geoCoder = new Geocoder(this, Locale.getDefault()); 
    StringBuilder builder = new StringBuilder(); 
    try { 
     List<Address> address = geoCoder.getFromLocation(lat, lng, 1); 
     int maxLines = address.get(0).getMaxAddressLineIndex(); 
     for (int i=0; i<maxLines; i++) { 
      String addressStr = address.get(0).getAddressLine(i); 
      builder.append(addressStr); 
      builder.append(" "); 
     } 

     String fnialAddress = builder.toString(); 

     latituteField.setText(String.valueOf(lat)); 
     longitudeField.setText(String.valueOf(lng)); 
     addressField.setText(fnialAddress); 

    } catch (IOException e) {} 
    catch (NullPointerException e) {} 
} 

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


} 

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

} 

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

你能幫我找到有什麼問題嗎? 即使它更簡單,我只需要應用程序知道我住的地方(我的意思是城市)

回答

0

閱讀有關位置策略的Android文檔here。您需要爲位置更新添加偵聽器。 getLastKnownLocation()應該仍然可以工作,但你不能依靠它。另外,你在模擬器上測試嗎?因此,如果您尚未使用開發工具設置位置,那麼您經常會得到null

+0

我測試設備 – Rick

1

你寫權限

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> 

,並請使用真實的電話

或設置GPS位置通過DDMS的模擬器

+0

上的應用程序是我寫的,我用我的三星來測試應用程序 – Rick