public class LocationUtil {
public static void getLoc(Context context){
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE );
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
final long maxAgeMilliSeconds = 1000 * 60 * 1; // 1 minute
final long maxAgeNetworkMilliSeconds = 1000 * 60 * 10; // 10 minutes
final long now = System.currentTimeMillis();
if(location==null || location.getTime() <now - maxAgeMilliSeconds){
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if(location == null || location.getTime() < now - maxAgeNetworkMilliSeconds){
//ͨ cellid λ
TelephonyManager telephonyManager = (TelephonyManager)context
.getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation gsmCellLocation = (GsmCellLocation) telephonyManager.getCellLocation();
if (gsmCellLocation != null){
int cid = gsmCellLocation.getCid();
int lac = gsmCellLocation.getLac();
int mnc = Integer.valueOf(telephonyManager.getNetworkOperator().substring(3, 5));
AppContext.currLoc= getLocationByCell(cid, lac, mnc);
}
}else{
// γ ȱ 浽 ڴ
AppContext.currLoc = new LoctionInfo(String.valueOf(location.getLatitude()),String.valueOf(location.getLongitude()));
}
}
}
public static City getCurrCity(Context context){
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE );
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
final long maxAgeMilliSeconds = 1000 * 60 * 1; // 1 minute
final long maxAgeNetworkMilliSeconds = 1000 * 60 * 10; // 10 minutes
final long now = System.currentTimeMillis();
if(location==null || location.getTime() <now - maxAgeMilliSeconds){
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if(location == null || location.getTime() < now - maxAgeNetworkMilliSeconds){
//ͨ cellid λ
TelephonyManager telephonyManager = (TelephonyManager)context
.getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation gsmCellLocation = (GsmCellLocation) telephonyManager.getCellLocation();
if (gsmCellLocation != null){
int cid = gsmCellLocation.getCid();
int lac = gsmCellLocation.getLac();
int mnc = Integer.valueOf(telephonyManager.getNetworkOperator().substring(3, 5));
AppContext.currLoc= getLocationByCell(cid, lac, mnc);
}
}else{
// γ ȱ 浽 ڴ
AppContext.currLoc = new LoctionInfo(String.valueOf(location.getLatitude()),String.valueOf(location.getLongitude()));
}
}
if(AppContext.currLoc!=null){
context.getSharedPreferences("locInfo", context.MODE_WORLD_WRITEABLE)
.edit().putString("currlat",AppContext.currLoc.getLat())
.putString("currlng",AppContext.currLoc.getLon())
.commit();
// server
String latlng = AppContext.currLoc.getLat()+","+AppContext.currLoc.getLon();
String reqUrl = "http://ditu.google.cn/maps/geo?output=json&key=abcdef&q="+latlng;
City city = sendToServer(reqUrl);
if(city!=null&& city.getCityName()!=null){
// ȡ س
if(AppContext.arrayList!=null){
if(AppContext.arrayList.contains(city)){
City city2 = (City) AppContext.arrayList.get(AppContext.arrayList.indexOf(city));
return city2;
}
}
ResultData resultData;
String cityJson = StringUtil.readCityJson(context);
if(cityJson!=null && !"".equals(cityJson)){
resultData = ParseManger.getCityList(cityJson,context);
}else{
String param = "?ctype=iphone&m=get_citylist";
String cityUrl = APIContants.API+param;
String response = NetManger.doPost(cityUrl, null);
resultData = ParseManger.getCityList(response,context);
}
if(resultData!=null && resultData.getArrayList()!=null){
ArrayList arrayList= resultData.getArrayList();
if(arrayList.contains(city)){
City city2 = (City) arrayList.get(arrayList.indexOf(city));
return city2;
}
}
}
}
return new City("北京", "bei_jing");//如果取不到城市,则默认返回北京
}
public static final String MAPABC_KEY = "4726f4e7aa32db60204e6c05d7e41ada440055e47021072e45322d670324223eedbbd89f7b0788d2";
public static String MAPAPC_INTERFACE_URL = "http://search1.mapabc.com/sisserver";
// config config=BSPS
// mnc mnc= Ӫ ̱ ʶ
// lac lac=λ ñ
// cellid cellid= վID
// a_k a_k=api key û key
/**
* lat, lon
*/
private static LoctionInfo getLocationByCell(int cid, int lac, int mnc) {
StringBuilder url = new StringBuilder(MAPAPC_INTERFACE_URL);
url.append("?config=BSPS&mnc=").append(mnc).append("&lac=").append(lac).append("&cellid=").append(cid).append(
"&a_k=").append(MAPABC_KEY);
String xCoord = "-1";
String yCoord = "-1";
HttpClient httpClient = new DefaultHttpClient();
LogUtil.printInfo("url.toString() : "+url.toString());
HttpGet request = new HttpGet(url.toString());
try {
HttpResponse response = httpClient.execute(request);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document dom = builder.parse(is);
Element root = dom.getDocumentElement();
NodeList personNodes = root.getElementsByTagName("location");
String lat=null,lon=null;
for(int i=0 ; i<personNodes.getLength(); i++){
Element personNode = (Element)personNodes.item(i);
NodeList childNodes = personNode.getChildNodes();
for(int j=0 ; j < childNodes.getLength(); j++){
Node childNode = childNodes.item(j);
if(childNode.getNodeType()==Node.ELEMENT_NODE){
Element element = (Element)childNode;
if("cenx".equals(childNode.getNodeName())){
lon = element.getFirstChild().getNodeValue();
}else if("ceny".equals(childNode.getNodeName())){
lat = element.getFirstChild().getNodeValue();
}
}
}
}
if(lat!=null && lon !=null){
return new LoctionInfo(lat,lon);
}
/*XmlPullParser pullParser = Xml.newPullParser();
pullParser.setInput(is, "GBK");
int eventType = pullParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
if ("cenx".equals(pullParser.getName())) {
xCoord = pullParser.nextText();
} else if ("ceny".equals(pullParser.getName())) {
yCoord = pullParser.nextText();
}
break;
}
eventType = pullParser.next();
}*/
/*if (!xCoord.equals("-1") && !yCoord.equals("-1")) {
return new LoctionInfo(xCoord,yCoord);
} else {
return null;
}*/
} catch (Exception e) {
e.printStackTrace();
return null;
}
return null;
}
public static String convertStreamToString(InputStream is) {
StringBuilder sb = new StringBuilder();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"gb2312"));
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
private static City sendToServer(String reqUrl) {
City city=null;
try {
URL url = new URL(reqUrl);
LogUtil.printInfo("reqUrl : "+reqUrl);
String response = NetManger.convertStreamToString(url.openStream());
city = ParseManger.getCurrCity(response);
// LogUtil.printInfo("response : "+response);
// LogUtil.printInfo("city : "+city);
} catch (Exception e) {
e.printStackTrace();
return null;
}
return city;
}
}
分享到:
相关推荐
本篇文章将分享一个利用Java实现根据IP地址获取地理位置的简单示例,主要使用了QQ在线接口,同时提到了其他如新浪、淘宝等提供的接口作为替代选项。 首先,我们来看一下核心的Java代码。这段代码定义了一个`...
**标题详解:** "百度地图WiFi定位获取地理位置" 在标题中提到的“百度地图WiFi定位获取地理位置”,是指利用百度地图提供的API(应用程序接口)服务,通过用户的WiFi信号来确定其所在的地理位置。这种技术通常用于...
"通过IP获取地理位置"就是一种常见的方法,它涉及到网络协议、数据库技术和地理编码等多个知识点。 首先,我们需要理解IP地址的工作原理。IP(Internet Protocol)地址是互联网上的每个设备的唯一标识,分为IPv4和...
java 根据经纬度获取地理位置
微信开发获取地理位置实例(java),使用环境 eclipse + maven + springmvc,虽然项目名是first_maven_project,但是确实是微信开发实例哈,不要有任何怀疑,免费分享啦,哈哈。实例讲解欢迎访问博主博客...
百度地图webapi获取地理位置
微信小程序-获取地理位置
本项目"IP获取地理位置asp"是基于ASP(Active Server Pages)和Access数据库技术实现的,它允许开发者通过用户的IP地址获取其大概的物理位置信息。在网页应用中,这种功能常用于提供个性化服务、安全验证、数据分析...
在Java编程中,根据IP地址获取地理位置是一项常见的需求,尤其在大数据分析、用户行为追踪或者安全防护等场景中。本文将介绍如何利用新浪和淘宝的API接口来实现这一功能。 首先,我们来看新浪的接口实现。新浪提供...
在这个场景中,我们将主要探讨如何使用Google Maps API 根据经纬度获取地理位置信息。 首先,`googleMap根据经纬度获取地理位置`这个标题涉及到的核心技术是Google Maps Geocoding服务。Geocoding是将地址或坐标...
3. 类文件`IpLocation.class.php`:这是一个PHP类,可能包含了获取和解析IP地址的函数,如`getIp()`用于获取IP,`getLocation()`用于根据IP获取地理位置信息。类的结构可能会包括构造函数、私有方法以及公开的方法...
在IT行业中,获取地理位置IP是一项基础且重要的任务,它通常涉及到网络编程、Web服务和地理定位技术。在标题“获取地理位置IP”中,我们聚焦于通过IP地址来确定设备所在的地理位置。描述提到“打开即获取到本机IP...
在Android开发中,获取地理位置是应用中常见的功能,尤其对于导航、社交、生活服务类应用而言,用户的位置信息至关重要。本教程将详细讲解如何通过异步加载的方式优化地理位置的获取,以解决gtLastKnownLocation()...
在Android开发中,获取地理位置是常见的功能之一,尤其在构建地图应用、导航系统或与位置相关的服务时。这个“android简单实现输入经纬度获取地理位置demo”是一个基础的示例,教你如何通过用户输入的经纬度数据来...
这些服务通常基于RESTful API,使用HTTP请求获取地理位置信息。在Java中,可以使用`HttpURLConnection`或`HttpClient`来发送GET或POST请求,并解析返回的JSON数据。例如,MaxMind的GeoLite2数据库可以免费下载,但...
【标题】: 使用Java通过Google JSON接口获取地理位置信息 【描述】: 在Android开发中,有时需要获取设备的地理位置信息,Google提供了公开的JSON接口,允许开发者通过GPS、基站信息或WiFi热点信息来获取这些数据。...
【标题】:“百度地图WiFi定位获取地理位置最新版”是指百度地图提供的一种服务,它通过结合WiFi信号和GPS(全球定位系统)以及基站信息,来精确地确定用户所在位置。这项技术在移动应用中广泛使用,尤其对于那些...
$location = ['error' => '无法获取地理位置信息']; } return response()->json($location); } ``` 上述代码首先获取客户端的IP地址,然后通过`app('geoip2')`获取GeoIP2实例,最后调用`city()`方法查询地理...
在IT行业中,尤其是在Web开发领域,常常需要获取用户设备的IP地址,并进一步通过这个IP来获取用户的地理位置信息。ThinkPHP是一个流行的PHP框架,它提供了一系列的功能来帮助开发者处理这类问题。本篇文章将深入探讨...