天气预报--定位更新天气

来源:互联网 发布:boll指标源码 编辑:程序博客网 时间:2024/04/29 06:10

定位使用了百度地图的SDK,将locSDK4.0,jar加入libs文件夹下,并build path,就可以使用百度地图定位包了。这没啥好说的,我贴上一个百度SDK定位的Demo吧:


import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;public class MainActivity extends Activity {private TextView mTv = null;public LocationClient mLocationClient = null;public MyLocationListenner myListener = new MyLocationListenner();public Button ReLBSButton=null;public static String TAG = "msg";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTv = (TextView)findViewById(R.id.textview);ReLBSButton=(Button)findViewById(R.id.ReLBS_button);mLocationClient = new LocationClient( this );/**—————————————————————————————————————————————————————————————————— * 这里的AK和应用签名包名绑定,如果使用在自己的工程中需要替换为自己申请的Key * —————————————————————————————————————————————————————————————————— *///mLocationClient.setAK("697f50541f8d4779124896681cb6584d"); //mLocationClient.setAK("z4nqERrqxnhNzT5VOGNVRt80");mLocationClient.registerLocationListener( myListener );setLocationOption();//设定定位参数mLocationClient.start();//开始定位// 重新定位ReLBSButton.setOnClickListener(new Button.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif (mLocationClient != null && mLocationClient.isStarted())mLocationClient.requestLocation();elseLog.d("msg", "locClient is null or not started");}});} //设置相关参数private void setLocationOption(){LocationClientOption option = new LocationClientOption();option.setOpenGps(true);option.setAddrType("all");//返回的定位结果包含地址信息option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000msoption.disableCache(true);//禁止启用缓存定位option.setPoiNumber(5);    //最多返回POI个数   option.setPoiDistance(1000); //poi查询距离        option.setPoiExtraInfo(true); //是否需要POI的电话和地址等详细信息        mLocationClient.setLocOption(option);} @Overridepublic void onDestroy() {mLocationClient.stop();//停止定位mTv = null;super.onDestroy();}    /**     * 百度基站定位错误返回码     *///  61 : GPS定位结果//  62 : 扫描整合定位依据失败。此时定位结果无效。//  63 : 网络异常,没有成功向服务器发起请求。此时定位结果无效。//  65 : 定位缓存的结果。//  66 : 离线定位结果。通过requestOfflineLocaiton调用时对应的返回结果//  67 : 离线定位失败。通过requestOfflineLocaiton调用时对应的返回结果//  68 : 网络连接失败时,查找本地离线定位时对应的返回结果//  161: 表示网络定位结果//  162~167: 服务端定位失败。/** * 监听函数,有更新位置的时候,格式化成字符串,输出到屏幕中 */public class MyLocationListenner implements BDLocationListener {@Override//接收位置信息public void onReceiveLocation(BDLocation location) {if (location == null)return ;StringBuffer sb = new StringBuffer(256);sb.append("time : ");sb.append(location.getTime());sb.append("\nerror code : ");sb.append(location.getLocType());sb.append("\nlatitude : ");sb.append(location.getLatitude());sb.append("\nlontitude : ");sb.append(location.getLongitude());sb.append("\nradius : ");sb.append(location.getRadius());sb.append("\nCity : ");sb.append(location.getCity());sb.append("\nProvince : ");sb.append(location.getProvince());if (location.getLocType() == BDLocation.TypeGpsLocation){sb.append("\nspeed : ");sb.append(location.getSpeed());sb.append("\nsatellite : ");sb.append(location.getSatelliteNumber());} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){/** * 格式化显示地址信息 */sb.append("\naddr : ");sb.append(location.getAddrStr());}sb.append("\nsdk version : ");sb.append(mLocationClient.getVersion());sb.append("\nisCellChangeFlag : ");sb.append(location.isCellChangeFlag());mTv.setText(sb.toString());Log.i(TAG, sb.toString());}//接收POI信息函数,我不需要POI,所以我没有做处理public void onReceivePoi(BDLocation poiLocation) {if (poiLocation == null) {return;}}}}
如果手机有联网,会得到一个location的对象,用它的getCity()就可以得到你所在的城市名字,然后根据这个城市名字到之前保存的CityId表中获取到相应城市Id,然后就跟我们第一个功能实现类似了,联网解析Json然后更新UI。

这里唯一让我疑问的是StringBuffer,刚开始看这个Demo没看懂sb.append是什么意思,通过查资料知道了:

String和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据。

String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。

StringBuffer类的构造函数:public StringBuffer()       创建一个空的StringBuffer类的对象。

public StringBuffer( int length )         创建一个长度为 参数length 的StringBuffer类的对象。(如果参数length小于0,将触发NegativeArraySizeException异常。

StringBuffer append(boolean b)
这些方法都是向字符串缓冲区“追加”元素,但是,这个“元素”参数可以是布尔量、字符、字符数组、双精度数、浮点数、整型数、长整型数对象类型的字符串、字符串和StringBuffer类等。如果添加的字符超出了字符串缓冲区的长度,Java将自动进行扩充。
这样就明白了最后的setText(sb.toString());是什么意思了,将格式化的信息输出到textview中。



0 0
原创粉丝点击