2012-12-12 58 views
3

問題很簡單:對於啓用特定提供程序時要調用的位置偵聽器的onProviderEnabled()方法,該偵聽器是否必須已請求來自同一提供程序的更新?僅當偵聽器爲該提供者註冊時才調用onProviderEnabled?

例如,如果您註冊網絡服務商與位置管理位置更新:

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

監聽器有一個onProviderEnabled()方法:

@Override 
    public void onProviderEnabled(String provider) { 
     Log.d(TAG, provider + " provider enabled"); } 

如果我現在打開GPS位置提供商將onProviderEnabled調用?

從我所經歷的情況來看,不會調用它,除非位置偵聽器也被註冊接收來自GPS提供者的更新。如果它應該是這樣的,那麼就需要向GPS和網絡提供商註冊,以便通知它已啓用。

可以從尚未啓用的位置提供商處註冊更新嗎?

回答

4

For a location listener's onProviderEnabled() method to be called when a specific provider is enabled, must that listener have already requested updates from that same provider?

是的,你需要註冊一個供應商能夠從中得到一個回調。

這是向一個提供程序註冊的操作,通知該提供程序存在一個偵聽程序。如果你沒有註冊,現在有辦法讓它知道聽衆存在。

Is it ok to register for updates from a location provider that is not yet enabled?

是的。

問候。

+0

謝謝。我檢查的全部原因是因爲我認爲可能註冊一個未啓用的位置提供程序正在破壞我的應用程序中的某些內容。很少,我的位置提供商似乎陷入困境,並且不提供任何新的位置。奇怪的是谷歌地圖仍然正常工作。但是,在我的應用程序中,位置監聽器在兩個提供商處均可以正常註冊,但在重新啓動手機之前,沒有找到新的位置!重新啓動/卸載/清除應用程序上的數據不能解決問題。發生這種情況時,GPS將停止工作,GPSLocationProvider可讓手機保持清醒狀態。 – Flyview

+0

我必須告訴你,我從來沒有遇到類似的事情,這不是由於我的應用程序中的錯誤而導致的。你首先說Google地圖仍然可以工作,然後它停止了所有的應用程序。你能澄清嗎?你是在'Service'還是'Thread'類中註冊監聽器?這可能會導致類似的情況。 – Luis

+0

網絡位置適用於谷歌地圖,但GPS不會顯示在谷歌地圖中(就好像它已關閉)。雖然GPS被卡住可能是一個單獨的問題。我在這裏提出了一個新問題:http://stackoverflow.com/questions/13849748/network-provider-stops-providing-updates – Flyview

相關問題