2011-09-07 71 views
0

我今天早些時候創建了這個,但它不起作用。位置管理器返回null,我甚至實現了監聽器。任何想法的問題。謝謝。LocationManager不會返回目的地

編輯: 我覺得這條線是問題

Location location = locationManager.getLastKnownLocation(provider); 

基本上,如果位置爲空,它會進入它下面的if語句的其他部分。每次我編譯代碼時,它都會進入else語句,這意味着它的位置沒有更新。

public class Activity1 extends Activity implements LocationListener { 
/** Called when the activity is first created. */ 
JoshTwoActivity main; 
Activity2 two; 
boolean checkTick = false; 
String locationplace = ""; 
private LocationManager locationManager; 
private String provider; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


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

    Criteria criteria = new Criteria(); 
    provider = locationManager.getBestProvider(criteria, false); 
    System.out.println(provider); 
    System.out.println(locationManager.getProviders(criteria, false)); 
    System.out.println(locationManager.getProvider("network")); 
    System.out.println(locationManager.getAllProviders()); 

    Location location = locationManager.getLastKnownLocation(provider); 
    System.out.println(locationManager.isProviderEnabled(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()); 
     System.out.println(String.valueOf(lat)); 
     System.out.println(String.valueOf(lng)); 

    } else { 
     System.out.println("Provider not available"); 
     System.out.println("Provider not available"); 
    } 

} 


/* 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) { 
    int lat = (int) (location.getLatitude()); 
    int lng = (int) (location.getLongitude()); 
    System.out.println(String.valueOf(lat)); 
    System.out.println(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_SHORT).show(); 

} 

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

}

+0

您正在使用的提供程序是什麼? –

+0

provider = locationManager.getBestProvider(criteria,false); 如果您正在說的是 –

+0

,您是否正在模擬器上測試,這已經返回了網絡? –

回答

0

好了我的第一個猜測是,你是不是通過命令行或通過使用Eclipse的DDMS角度探討給人的位置鎖定。如果這是問題,請打開DDMS perpecive,並提供你想要的緯度和長度併發送它。所以如果這是問題,那麼位置不會是空的。

+0

問題是,當我想發佈應用程序時,我將無法使用DDMS。我按照你的說法把它放進去,但仍然沒有。 –

+0

當然你沒有DDMS在實際的設備上,DDMS是在那裏模擬的過程。正如我之前所說的,在模擬器啓動時可能沒有給出位置修復的原因,因爲通過DDMS執行該過程沒有附加位置信息,因此您可以獲取最後一次知道的位置,以便您的位置對象不應該爲空。 –

+0

右o。我現在會嘗試。 –

1

getLastKnownLocation()返回最後已知的位置鎖定爲供應商的位置。如果提供程序返回null,則提供程序從未進行位置修復。這並不意味着提供商不可用。

一旦你調用getLastKnownLocation(),你應該檢查結果是否準確或近期足夠你的目的。如果不是的話,你應該使用requestLocationUpdates()來請求位置更新。

此博客文章包含您需要了解的使用位置提供程序編寫代碼的所有內容。 http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html

相關問題