在上一篇中讲到了使用google 提供的API来获得 地理位置信息, 但由于google被禁的原因,所以无法进行反地址编码,所以, 无法获得详细的地址信息,所以,这里转向了baidu定位。
在baidu开发者中心申请ak,然后下载相应的jar包倒入lib中。具体环境配置的方法看百度开发者中心的文档。
我想要实现的功能是,在不通过导入地图的情况下,获得地理位置。
设置AndroidManifest.xml
在application标签中声明service组件,每个app拥有自己单独的定位service
【提醒】
定位SDKv3.1版本之后,以下权限已不需要,请取消声明,否则将由于Android 5.0多帐户系统加强权限管理而导致应用安装失败。 <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></uses-permission>
声明使用权限
设置AcessKey
SDK4.2及之后版本需要在Mainfest.xml设置Accesskey,设置有误会引起定位和地理围栏服务不能正常使用,必须进行Accesskey的正确设置。
设置AccessKey,在application标签中加入
//key:开发者申请的key 相关实现代码如下: locationClient在主线程中定义。 /* *在撤销时,将locationClient停止 */
protected void onDestroy(){
super.onDestroy(); if(locationClient != null && locationClient.isStarted()){ locationClient.stop(); locationClient = null; } }/**
*在主线程中进行调用该函数获得相应信息
*/
private void getCurrentCity(){ locationClient = new LocationClient(getApplicationContext()); new Thread(new Runnable(){ @Override public void run() { //定位相关配置 LocationClientOption option = new LocationClientOption(); option.setIsNeedAddress(true); //设置是否需要详细的address,这正是我想要的,可以获得城市,省份,街道等 option.setOpenGps(true); //打开GPS; option.setCoorType("bd0911");//设置返回值的坐标类型 option.setProdName("danmulvxing"); option.setScanSpan(UPDATE_TIME); locationClient.setLocOption(option);//注册监听
locationClient.registerLocationListener(new BDLocationListener(){ @Override public void onReceiveLocation(BDLocation location) { if(location == null) { Message error = new Message(); error.what = NO_LOCATION; handler.sendMessage(error); return; } Message message = new Message(); message.what = SHOW_CITY; message.obj = location.getCity(); handler.sendMessage(message); } });//开始定位
locationClient.start(); locationClient.requestLocation(); } }).start(); } private Handler handler = new Handler(){ public void handleMessage(Message msg){ switch(msg.what){ case SHOW_CITY: String city = (String)msg.obj; Toast.makeText(getApplicationContext(), "City is " + city.substring(0, city.length() - 1), Toast.LENGTH_SHORT).show(); updateSpinnerCity(city.substring(0, city.length() - 1)); //更新城市 break; case NO_LOCATION: Toast.makeText(getApplicationContext(), "定位失败,请稍后重试", Toast.LENGTH_SHORT).show(); break; } } };百度已经实现了很多有用的接口,具体可以查看百度API文档