2013-10-24 91 views
1

我嘗試獲取Android設備上用戶的位置。程序檢查GPS的可用性。如果GPSProvider禁用,則警告用戶。如果用戶不啓用GPS,請編程檢查networkProvider。網絡連接已關閉,但位置提供商爲NetworkProvider

代碼檢查網絡提供商,

public boolean askNetworkProvider(){ 

    if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ 
     AlertDialog builder = new AlertDialog.Builder(context) 
       .setMessage("Enable Network Connection") 
       .setTitle("Warning!") 
       .setCancelable(true) 
       .setPositiveButton("OK", new OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         return; 
        } 
       }).show(); 
    } 

    if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ 

     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 2000, 0, networkListener); 
     mlocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
     Log.i(LocationService.class.getName(),"Network Enable!!"); 
     return true; 

    } 
    return false; 
} 

即使WiFi和移動連接禁用,它說networkProvider是啓用和if語句進入第二。但它應該是錯誤的。我該如何解決它?

回答

6

也許您在下拉選項中禁用了主菜單的Wi-Fi連接,而不是禁用Settings-Location Services下的「使用無線網絡」。

請記住,Wi-Fi!=使用無線網絡。

當您使用

locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 

它cheking 「用戶無線網絡」 選項。

我有同樣的問題,許多類似的問題發佈在StackOverflow上,只有一個答案有這個信息。花了我一整個下午。希望你明白了! :)

+0

這是真的,謝謝! –

0

我認爲你最好使用googlePlay sdk作爲GPS。

它正在像一個魅力與愚蠢的錯誤。 我將您的代碼更改爲googlePlay sdk,這對我的用戶來說非常合適。 (沒有抱怨)

+0

你是如何將代碼更改爲googlePlay sdk的。對不起,我是新的Android – lifetime

0

我不認爲「啓用」意味着你的想法。您檢查的所有內容都是查看用戶是否允許電話使用位置提供商,即啓用的位置服務通過WiFi獲取位置。這並不意味着NetworkProvider已經或將成功返回結果,只是用戶已經允許它被訪問。

難點在於使用LocationManager沒有「更新失敗」響應。只有當用戶的位置在您的參數內發生變化時纔會收到通知。如果它從來沒有做過,那麼你可以做的事情就不多了。

我發現使用GooglePlayServices獲取位置更容易,然後如果播放服務不可用或返回錯誤,則切換到標準位置管理器作爲備份。你可以看到如何做到這一點here。還有一個偉大的post on the android developers blog,它演示瞭如何結合這兩種方法來使用谷歌播放如果可用,並切換到常規位置管理器,如果不可用

1

在新的Android 4.3(API等級18及以上)和使用它的設備,高級WiFi設置:「始終掃描」。如果選中其複選框,即使WiFi關閉,設備也能夠掃描WLAN &位置,因此很可能會輸入第二個if語句。 要以編程方式獲得此修復,可以將構建版本檢查(可能還有其他一些設置檢查)添加到if語句中。 (並且您應該定義您希望在這種情況下如何工作。) 簡單的手動解決方法當然是禁用設置:例如,在Nexus 7中:設置 - > WiFi->高級 - >取消選中「始終可用掃描」。

0

Google通過融合位置實施更新了其位置邏輯。我想你會發現這個例子有趣。獲取位置更新時,您不必定義啓用或不啓用提供程序。 http://www.kpbird.com/2013/06/fused-location-provider-example.html?m=1
編輯:這不是你的問題的答案,但在我看來融合的位置實施是位置聆聽的最佳實踐。我希望你在融合的位置實施你的位置聽音結構。

相關問題