2013-07-15 101 views
6

如果有人能幫助我,我將不勝感激您的幫助。 我需要在我的應用程序中有一個準確的位置跟蹤器,我希望它能像這樣操作。 它找到了網絡人的第一個位置,同時我開始請求GPS定位。當GPS給我一個位置,我想不再聽網絡位置。之後,我只想要從網絡請求一個位置,只有在Gps不固定的情況下(不能給我一個位置)。當GPS再次修復時,我想停止收聽網絡,這是我想要實現的循環,因爲GPS更加靈活,我希望將網絡本地化作爲備份。 我看到這個帖子,但我似乎無法理解如何使其適應我的需要,就需要根據GPS狀態可互換網絡和GPS位置提供者android

How can I check the current status of the GPS receiver?

出主意,謝謝提前#1 Comunity。

回答

1

1.停止偵聽網絡位置更新: 這樣做非常簡單。只需撥打

your_loc_manager.removeUpdates(network_location_listener); 

2.獲取位置從網絡提供商,如果GPS提供商沒有給出任何解決 你可以嘗試像下面給出的(而不是定時器,你可以嘗試使用GpsStatus監聽器...)

用於獲取網絡提供商的更新

boolean network_enabled ; 
try { 
    network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
} catch(Exception ex) { 
    ex.printStackTrace(); 
} 

if(!network_enabled) 
    return; 

locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 100, networkLocationListener); 

return; 

裏面的方法獲得的GPS位置的方法中

boolean gps_enabled; 
try { 
    gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
} catch(Exception ex) { 
    ex.printStackTrace(); 
} 

if(!gps_enabled) { 
    // call your method for getting network location updates 
    return; 
} 

locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 50, locationListenerGps); 
new Timer().schedule(new TimerTask() { 

    @Override 
    public void run() { 
     // You should call your method of getting Network locations based on some 
     // condition which would tell whether you really need to ask for network location 

    } 
}, 20000 /* Time Value after which you want to stop trying for GPS and switch to Network*/); 

編輯1:

還有「我並不需要知道什麼時候從GPS獲取更新,我需要知道什麼時候能得到來自網絡的更新(我的意思是,我需要知道在GPS搜索,而不是固定時)。以及如何控制網絡和GPS」

之間的互換性......如果修復已丟失那麼只有你需要尋找網絡更新,所以我曾建議打電話

if (hasGPSFix) { 
    Log.i("GPS","Fix Lost (expired)"); 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener); 
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 2000, 10, locationListener); //===> new line which I am suggesting 
} 
hasGPSFix = false; 

這樣,你將從網絡獲取位置更新,而GPS將繼續嘗試修復,一旦GPS修復完成,GPSFix將更改其值,並且該鏈接中的現有代碼將停止查找網絡更新。至少這是我能理解的你想達到的目標可能是我沒完全理解你

編輯2: 這是我處理了GPS和網絡提供商

的mapActivity或任何你需要獲得位置更新,你需要創建這個MyLocation類的實例類。此外,要繼續獲取位置更新信息,您需要在您的通話活動中實施LocationResultpublic abstract void gotLocation(Location location, boolean isGpsData);會告訴你剛剛收到的更新是來自網絡還是GPS。此外,如果數據從GPS返回,它會自動關閉網絡監聽器。如果您需要GPS等數據,您需要撥打getFineLocation()方法。您需要針對自己的目的增強所提供的代碼(例如,當您只想刪除網絡更新等時,您需要增強closeListeners()方法來關閉一個提供程序......),但它會基本實現您的目標想要(當然還有GpsStatus.Listener的實現,所以兩者結合應該很好地滿足你的目的)。

public class MyLocation { 
    LocationManager locManager; 
    LocationResult locationResult; 
    boolean gps_enabled = false; 
    boolean network_enabled = false; 

    public boolean getCoarseLocation(Context context, LocationResult result) { 
    locationResult = result; 
    if(locManager == null) 
     locManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 

    try { 
     network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
    } catch(Exception ex) { 
     ex.printStackTrace(); 
    } 

    if(!network_enabled) 
     return false; 

    locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 100, networkLocationListener); 
    return true; 
    } 

    public boolean getFineLocation(Context context, LocationResult result) { 
    locationResult = result; 
    if(locManager == null) 
     locManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 

    try { 
     gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    } catch(Exception ex) { 

    } 

    if(!gps_enabled) 
     return false;//No way to get location data 

    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 100, locationListenerGps); 
    return true; 
    } 

    LocationListener locationListenerGps = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     locationResult.gotLocation(location,true); 
     locManager.removeUpdates(networkLocationListener); 
    } 
    public void onProviderDisabled(String provider) {} 
    public void onProviderEnabled(String provider) {} 
    public void onStatusChanged(String provider, int status, Bundle extras) {} 
    }; 

    LocationListener networkLocationListener = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     locationResult.gotLocation(location,false); 
    } 
    public void onProviderDisabled(String provider) {} 
    public void onProviderEnabled(String provider) {} 
    public void onStatusChanged(String provider, int status, Bundle extras) {} 
    }; 

    public void closeListeners() { 
    if(locManager == null) 
     return; 

    if(locationListenerGps != null) 
     locManager.removeUpdates(locationListenerGps); 
    if(networkLocationListener != null) 
     locManager.removeUpdates(networkLocationListener); 
    } 

    public static abstract class LocationResult { 
    public abstract void gotLocation(Location location, boolean isGpsData); 
    } 

    public static boolean hasNetworkProvider(Context mContext) { 
    List<String> myProvidersList = ((LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE)).getProviders(false); 
    return myProvidersList.contains("network"); 
    } 

    public static boolean hasGPSProvider(Context mContext) { 
    List<String> myProvidersList = ((LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE)).getProviders(false); 
    return myProvidersList.contains("gps"); 
    } 
} 
+0

//你應該打電話給你基於某些 //條件這會告訴你是否真的需要問的網絡位置獲取網絡位置的方法。 我的評論: 這是我的問題,我似乎無法找到一種方式來形成該條件,條件是如果gps是固定的或不。 GPS啓用與否的問題不是問題,問題在於瞭解gps是否能夠響應或正在搜索衛星(這就是我的意思是固定或搜索) –

+0

然後,我認爲你應該看看這[回答](http://stackoverflow.com/a/6782146/430480)。它幾乎在做你想做的事情。如果(hasGPSFix) { Log.i(「GPS」,「Fix Lost(expired)」); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,10,locationListener); } hasGPSFix = false;'這裏你應該請求GPS和網絡更新。這應該這樣做,因爲相關的處理似乎已經在那裏時,GPS Fix已被再次獲得 – Rajeev

+0

這個答案是無效的,我試過,因爲他使用的方法 Global.getInstance()。currentGPSLocation這是一個無效的方法,doesn'從我所看到的全球課堂中存在。另一件事是,我不需要知道什麼時候從GPS獲取更新,我需要知道什麼時候從網絡獲取更新(我的意思是我需要知道什麼時候GPS正在搜索,而不是當它是固定的)。以及如何控制網絡和GPS之間的互換性。 –

相關問題