在我現在的應用程序中,返回的位置信息是過時的。我使用一個方法來獲得更新基於最小時間/更新之間的距離。然而,比方說,我把手機關掉,開車去另一個城市,然後把手機打開,在這種情況下我的GPS就會關閉。我怎麼做才能讓app獲得當前的位置,而不是getLastKnownLocation()
我聽說過locationListener
,但是我獲得信息關於怎麼用它都很模糊
下邊是我的代碼,希望能對找到問題有點幫助:
public class GPSHandling extends Service implements LocationListener{
private final Context myContext;
//gps狀態標記
public boolean isGPSEnabled = false;
//網絡狀態標記
public boolean isNetworkEnabled = false;
//用於決定是否我能通過網絡或者是GPS獲得位置
public boolean canGetLocation = false;
Location myloc;
public double latitude;
public double longitude;
public int MIN_TIME_BTWN_UPDATE = 500*10;
public int MIN_DISTANCE_BTWN_UPDATE = 10;
protected LocationManager locManager;
public GPSHandling(Context context){
this.myContext= context;
getLocation();
}
public Location getLocation(){
try{
locManager =(LocationManager) myContext.getSystemService(LOCATION_SERVICE);
// 現在獲得gps狀態
isGPSEnabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
//獲得網絡狀態
isNetworkEnabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled){
(this.cangetlocation = false but its already set to that by default)
}
else{
this.canGetLocation=true;
//首先從網絡提供商獲得值給locManager,發給parameters告訴他們何時更新
if(isNetworkEnabled){
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BTWN_UPDATE, MIN_DISTANCE_BTWN_UPDATE, this);
Log.d("provider", "network");
//如果我們成功了,然後檢查位置信息是不是空,試著從manager處獲得當前位置信息
if (locManager != null){
myloc =locManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
// 在得到當前的位置後,試著獲得經緯度
if (myloc != null){
latitude = myloc.getLatitude();
longitude = myloc.getLongitude();
}
}
}
//現在從GPS提供商獲得值給locManager,發給parameters告訴什麼時候更新】
if(isGPSEnabled){
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BTWN_UPDATE, MIN_DISTANCE_BTWN_UPDATE, this);
Log.d("provider", "GPS");
}
//如果我們成功了,然後檢查位置信息是不是空,試著從manager處獲得當前位置信息
if(locManager!= null){
myloc = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
//在得到當前的位置後,試著獲得經緯度
if(myloc != null){
latitude = myloc.getLatitude();
longitude = myloc.getLongitude();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return myloc;
}
//通過類方法獲得當前緯度的數據
public double getMyLatitude(){
if (myloc!= null){
latitude = myloc.getLatitude();
}
return latitude;
}
//通過類方法獲得當前經度的數據
public double getMyLongitude(){
if (myloc != null ){
longitude = myloc.getLongitude();
}
return longitude;
}
//用這個方法看app是否能獲得當前的坐標
public boolean canGetMyLocation(){
return this.canGetLocation;
}
public void showGPSDialog(){
AlertDialog.Builder alert = new AlertDialog.Builder(myContext);
//設置Dialog Title
alert.setTitle("Location Setting");
// 設置Dialog Message
alert.setMessage("GPS is not enabled, do you want to enable this now in the settins menue?");
//給dialog設置icon
//alert.setIcon(R.drawable.)
//當點擊的時候設置按鈕
alert.setPositiveButton("Settins", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
myContext.startActivity(intent);
}
});
//當點擊的時候取消按鈕
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
//顯示警告dialog
alert.show();
}
public void stopUsingGPS(){
if(locManager !=null){
locManager.removeUpdates(GPSHandling.this);
}
}
@Override
public void onLocationChanged(Location location) {
// TODO自動生成方法存根
}
@Override
public void onProviderDisabled(String provider) {
// TODO自動生成方法存根
}
@Override
public void onProviderEnabled(String provider) {
// TODO自動生成方法存根
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO自動生成方法存根
}
@Override
public IBinder onBind(Intent intent) {
// TODO自動生成方法存根
return null;
}
}
您已經在您的代碼中使用了一部分的LocationListener了。你只是沒有完全實現代碼。
在你的代碼中下邊的這個是空的:
@Override
public void onLocationChanged(Location location) {
// TODO自動生成方法存根
}
這個方法在每次GPS生成一個新的位置信息的時候都要調用的。
你應該把它完成的:
@Override
public void onLocationChanged(Location location) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
就是以上這些了