Andriod+phonegap实现显示手机所在地天气

来源:互联网 发布:生物钟紊乱 知乎 编辑:程序博客网 时间:2024/04/29 08:13

最近做了一个手机新闻阅读器,使用andriod和phonegap,基本实现了,最后又要求加入显示天气。查阅了一些资料,phonegap可以再web端调用手机的api,可以获取手机所在地的经纬度。我们可以想到:用经纬度获取城市名称,然后查询城市天气。不错,我也是这个思路,那么我们来具体实现。

首先我们要在andriod上配置好phonegap,这个不再在这里讨论,网上有许多资料。

首先,调用phonegap的api来获取经纬度,要使用这个API要确保手机开启网络服务和位置定位服务。

document.addEventListener("DOMContentLoaded",function(){document.addEventListener("deviceready", onDeviceReady, false); },false);function onDeviceReady() {navigator.geolocation.getCurrentPosition(onSuccess, onError);    }
第5行是调用phonegap的API,onSuccess是调用成功返回经纬度的处理函数,返回的经纬度封装在变量position里面,可以直接使用;onError是调用失败的处理函数;

假设我们成功获取position,接下来我们就要通过position获取城市名称,这里我们通过google提供的api。

首先,要使用google的API要在html页面加上

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=zh-CN"></script>

当然要连接网络才能调用google的这个API,所以在使用之前应该有网络判断,这里不再详细解释

接下来我们就编写这两个处理函数:

function onSuccess(position){//position是phonegap返回的位置信息,包括经纬度var latlng=new google.maps.LatLng(position.coords.latitude,position.coords.longitude);//初始化一个google的经纬度对象var geocoder = new google.maps.Geocoder();//定义一个google地图位置服务对象var location,location1,location2;//这里三个location在后面详细说明        geocoder.geocode({'latLng':latlng},function(results,status){//调用google的API        if(status==google.maps.GeocoderStatus.OK){//google返回的地理信息有很多,由详细到简单,如经纬度为(40,116)的地方,google返回的信息有:1.                //精确到街道的详细地址,也就是你的通讯地址;2.简单一点的,如中国,北京市,门头沟地区;3.再简单一点,如中国,北京市;4.更简单的,如中国;                //这里不再详细说明,这些地址信息都存储在results数组里,每个地址都有一个类型标示,如“中国,北京市”这个地址的标示是
//"country,political",所以我们可以根据这些标示,来获取我们想要的地址,通过这些地址字符串,截取我们想要的城市名称

  for(var i=0;i<results.length;i++) { if(results[i].types=="country,political") { location1=results[i].formatted_address; } else if(results[i].types=="administrative_area_level_1,political") { location2=results[i].formatted_address; } else if(results[i].types=="locality,political") { location3=results[i].formatted_address; } } if(location2.replace(location1,"")==location3.replace(location1,"")) location=location2.replace(location1,"").replace("市",""); else location=location3.replace(location2,"").replace("市","");
//location变量存储了我们要获取的城市名称,接下来就可以把location传递给天气预报的API,可以选用phonegap的插件功能直接调用底层的java来实现,这里不再详细解释。

}
还有个onError函数,这个可以根据需要,提示一些错误信息或者进行一下其他的逻辑。

以上仅是我个人的一些编程思路和经验,如果有更好的思路想法,欢迎交流!!