簡體   English   中英

如何在不使用GPS的情況下以編程方式檢測Android設備當前所在的國家/地區?

[英]How to programmatically detect in which country the android device is located currently without using GPS?

當我的應用程序運行時,我想檢測當前位置的國家/地區名稱並為該特定國家/地區名稱執行一些操作,我可以使用地理編碼器,gps輕松完成。 但是我希望從Locale獲得它,或者是否有更多可用的東西。

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

文檔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": ""

}

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

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

要從命令行進行測試,請嘗試:

shell@flounder:/ $ service call country_detector 1
Result: Parcel(
  0x00000000: 00000000 00000001 00000002 00530055 '............U.S.'
  0x00000010: 00000000 00000003 1d809dda 00000000 '................')

對象序列化基本上只是2個字母的國家代碼(這里是:US),源代碼(這里,3,暗示這是從Locale中收集的),以及時間戳(1d809dda ...)實際上不是那個重要。 您不必擔心序列化,因為該對象是Parcelable。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM