2012-05-25 29 views
3

當我的應用程序運行時,我想檢測當前位置的國家名稱,併爲該特定國家/地區名稱做一些事情,我可以使用geocoder,gps輕鬆完成。但是我想從Locale中獲取它,或者如果有更多的東西可用。如何以編程方式檢測Android設備當前位於哪個國家而不使用GPS?

+0

*「做一些東西」*具體是什麼東西? –

+0

我想做一個貨幣換算器,所以我需要檢測應用程序啓動的位置並設置該國的默認貨幣 – Reyjohn

+0

您可以使用Google定位服務API而不使用GPS嗎?或者你想避免這種情況? – psubsee2003

回答

5

我不知道Android API是否允許您檢查相關GSM網絡的提供商代碼。如果可以的話,您可以使用此代碼進行檢查,即對照此列表:http://www.techgsm.com/page/gsm-provider-codes/network-provider-identify-codes.html以查明手機在哪個國家/地區。

+1

+1這太棒了......從來沒有想過。提供者代碼也稱爲MCC。在其他地方發現了一個可能有所幫助的問題:http://stackoverflow.com/q/890366/250725 ...雖然在飛行模式下可能無法工作。 – psubsee2003

11

使用此鏈接http://ip-api.com/json,這將提供所有信息爲json。從這個json你可以很容易地得到國家。本網站使用您的當前IP,它會自動檢測IP和回送細節。

Docs http://ip-api.com/docs/api:json 希望它有幫助。

這就是我得到的。

{ 
"as": "AS55410 C48 Okhla Industrial Estate, New Delhi-110020", 
"city": "Kochi", 
"country": "India", 
"countryCode": "IN", 
"isp": "Vodafone India", 
"lat": 9.9667, 
"lon": 76.2333, 
"org": "Vodafone India", 
"query": "123.63.81.162", 
"region": "KL", 
"regionName": "Kerala", 
"status": "success", 
"timezone": "Asia/Kolkata", 
"zip": "" 

}

+1

但它有侷限性。他們的系統將自動禁止每分鐘執行超過150次請求的IP地址。 –

1

你可以(也應該)使用Android的國家檢測服務。該服務由三個方法組成,所有這些方法都在.aidl中定義,這些方法使您可以獲取國家/地區代碼,註冊偵聽器或將其刪除。具體來說,您需要第一個 - Country detectCountry();,它返回一個android.location.Country對象(AOSP中的frameworks/base/location/java/android/location/Country.java)。我假設你知道如何以編程方式調用方法(你需要getSystemService(「country_detector」))。

要在命令行測試,嘗試:

[email protected]:/ $ service call country_detector 1 
Result: Parcel(
    0x00000000: 00000000 00000001 00000002 00530055 '............U.S.' 
    0x00000010: 00000000 00000003 1d809dda 00000000 '................') 

對象序列基本上沒有什麼比2字母國家代碼(位置:美國)越多,來源(在這裏,3,這意味着這是收集來自Locale)和一個時間戳(1d809dda ...),這實際上並不重要。由於對象是Parcelable,所以您不必擔心序列化。

相關問題