如何用路由器搭配硬盘路由器组建 Time Machine

Android 百度定位SDK error code 167_百度地图api吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:5,498贴子:
Android 百度定位SDK error code 167收藏
使用locSDK_3.3_Demo在某些地点会出现 error code 167 ,经纬度为4.9E-324但是使用百度地图定位准确,误差很小.就算显示出地点,但定位不准确,误差范围300米以上请问大大们,这个是什么问题?
学车三月正当时,本周报名立减400元!限时优惠哦~
百度地图是通过基站定位的,一个点至少有三个基站定位,然后你会看到你点到的点在那个信号更强些就靠近那个基站,所以说其定位是不能很精确的,如果要精确就必须要用到GPS卫星定位,但是这个很慢,所以大多数定位都是通过基站定位。
打开GPS 就好了。
检查下权限是否允许
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或android studio百度地图对接(2)定位对接 - 简书
android studio百度地图对接(2)定位对接
首先将所有库文件放入LIB文件夹下
在android studio中,有SO文件,代表使用了JNI,需要加入以下引入
sourceSets{
jniLibs.srcDirs=['libs']
Paste_Image.png
设置AndroidManifest.xml
在application标签中声明service组件,每个app拥有自己单独的定位service
&service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"&&/service&
声明使用权限
&!-- 这个权限用于进行网络定位--&
&uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"&&/uses-permission&
&!-- 这个权限用于访问GPS定位--&
&uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"&&/uses-permission&
&!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE"&&/uses-permission&
&!-- 获取运营商信息,用于支持提供运营商信息相关的接口--&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"&&/uses-permission&
&!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--&
&uses-permission android:name="android.permission.CHANGE_WIFI_STATE"&&/uses-permission&
&!-- 用于读取手机当前的状态--&
&uses-permission android:name="android.permission.READ_PHONE_STATE"&&/uses-permission&
&!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"&&/uses-permission&
&!-- 访问网络,网络定位需要上网--&
&uses-permission android:name="android.permission.INTERNET" /&
&!-- SD卡读取权限,用户写入离线定位数据--&
&uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"&&/uses-permission&
设置AcessKey
&meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="key" /& //key:开发者申请的key
Paste_Image.png
实现BDLocationListener接口
//移动定位部分
public class MyLocationListener implements BDLocationListener {
public void onReceiveLocation(BDLocation location) {
//Receive Location
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());
if (location.getLocType() == BDLocation.TypeGpsLocation){// GPS定位结果
sb.append("\nspeed : ");
sb.append(location.getSpeed());// 单位:公里每小时
sb.append("\nsatellite : ");
sb.append(location.getSatelliteNumber());
sb.append("\nheight : ");
sb.append(location.getAltitude());// 单位:米
sb.append("\ndirection : ");
sb.append(location.getDirection());// 单位度
sb.append("\naddr : ");
sb.append(location.getAddrStr());
sb.append("\ndescribe : ");
sb.append("gps定位成功");
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){// 网络定位结果
sb.append("\naddr : ");
sb.append(location.getAddrStr());
//运营商信息
sb.append("\noperationers : ");
sb.append(location.getOperators());
sb.append("\ndescribe : ");
sb.append("网络定位成功");
} else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
sb.append("\ndescribe : ");
sb.append("离线定位成功,离线定位结果也是有效的");
} else if (location.getLocType() == BDLocation.TypeServerError) {
sb.append("\ndescribe : ");
sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-,会有人追查原因");
} else if (location.getLocType() == BDLocation.TypeNetWorkException) {
sb.append("\ndescribe : ");
sb.append("网络不同导致定位失败,请检查网络是否通畅");
} else if (location.getLocType() == BDLocation.TypeCriteriaException) {
sb.append("\ndescribe : ");
sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");
sb.append("\nlocationdescribe : ");
sb.append(location.getLocationDescribe());// 位置语义化信息
List&Poi& list = location.getPoiList();// POI数据
if (list != null) {
sb.append("\npoilist size = : ");
sb.append(list.size());
for (Poi p : list) {
sb.append("\npoi= : ");
sb.append(p.getId() + " " + p.getName() + " " + p.getRank());
Log.i("BaiduLocationApiDem", sb.toString());
根据设置,此监听服务每到指定时间间隔就会触发一次,或者循环触发
public LocationClient mLocationClient =
public BDLocationListener myListener = new MyLocationListener();
public void onCreate() {
mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类
mLocationClient.registerLocationListener( myListener ); //注册监听函数
配置定位SDK参数
* 定位配置
private void initLocation(){
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
int span=30000;
option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);//可选,默认false,设置是否使用gps
option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
mLocationClient.setLocOption(option);
高精度定位模式:这种定位模式下,会同时使用网络定位和GPS定位,优先返回最高精度的定位结果;低功耗定位模式:这种定位模式下,不会使用GPS,只会使用网络定位(Wi-Fi和基站定位);仅用设备定位模式:这种定位模式下,不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位。
错误码分析
getLocType ( )
此方法实现在监听中错误码如下:61 : GPS定位结果,GPS定位成功。62 : 无法获取有效定位依据,定位失败,请检查运营商网络或者wifi网络是否正常开启,尝试重新请求定位。63 : 网络异常,没有成功向服务器发起请求,请确认当前测试手机网络是否通畅,尝试重新请求定位。65 : 定位缓存的结果。66 : 离线定位结果。通过requestOfflineLocaiton调用时对应的返回结果。67 : 离线定位失败。通过requestOfflineLocaiton调用时对应的返回结果。68 : 网络连接失败时,查找本地离线定位时对应的返回结果。161: 网络定位结果,网络定位定位成功。162: 请求串密文解析失败,一般是由于客户端SO文件加载失败造成,请严格参照开发指南或demo开发,放入对应SO文件。167: 服务端定位失败,请您检查是否禁用获取位置信息权限,尝试重新请求定位。502: key参数错误,请按照说明文档重新申请KEY。505: key不存在或者非法,请按照说明文档重新申请KEY。601: key服务被开发者自己禁用,请按照说明文档重新申请KEY。602: key mcode不匹配,您的ak配置过程中安全码设置有问题,请确保:sha1正确,“;”分号是英文状态;且包名是您当前运行应用的包名,请按照说明文档重新申请KEY。501~700:key验证失败,请按照说明文档重新申请KEY。
mLocationClient.start();
start:启动定位SDK。 stop:关闭定位SDK。
android studio 定位功能的对接 就到此结束了.
图例如下:
Paste_Image.png
欢迎收藏添加,一旦处理到以前的项目,就写为文章android(38)
百度定位demo文档上很清楚,网上资源不多,不齐全,给大家分享下
& & & && 61 : GPS定位结果\n
&& &&& &62 : 扫描整合定位依据失败。此时定位结果无效。\n
&& &&& &63 : 网络异常,没有成功向服务器发起请求。此时定位结果无效。\n
&& &&& &65 : 定位缓存的结果。\n
&& &&& &66 : 离线定位结果。通过requestOfflineLocaiton调用时对应的返回结果\n
&& &&& &67 : 离线定位失败。通过requestOfflineLocaiton调用时对应的返回结果\n
&& &&& &68 : 网络连接失败时,查找本地离线定位时对应的返回结果\n
&& &&& &161: 表示网络定位结果\n
&& &&& &162~167: 服务端定位失败\n
&& &&& &502:key参数错误\n
&& &&& &505:key不存在或者非法\n
&& &&& &601:key服务被开发者自己禁用\n
&& &&& &602:key mcode不匹配\n
&& &&& &501~700:key验证失败\n
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:63593次
积分:1429
积分:1429
排名:千里之外
原创:71篇
转载:75篇
(3)(1)(7)(62)(3)(3)(1)(4)(3)(4)(3)(2)(6)(9)(12)(2)(3)(3)(13)(4)1502人阅读
& & & & & 写这篇博格的原因是刚好有需求,然后四处找资料发现百度地图更新太快,网上的博客demo都过时了。对于初学者来说,跟着博客学比较方便快捷,但当有一定程度虚席以后建议跟着官方提供的sample及api学习。
先看一下效果图吧
首先开发环境,本人用的android studio,跟着潮流走嘛!所以我们就从导入百度地图所需的jar和so文件开始,jar的导入就不讲了,你都懂得,嘿嘿!
& 一.Android studio中默认使用的是gradle编译方式,与ADT编辑方式不一样,那么so文件应当如何引入呢?
其实很简单。看一下so文件如何引入到编译环境,最终到JNI直接可以调用该so文件。
首先,在我们的Module的根目录中建立libs目录,将j百度地图集所需的so文件分别拷入,截图如下:
然后就是编写我们的build.gradle文件。
关于so文件引入的配置很简单,代码配置如下:
task nativeLibsToJar(type: Zip, description: &create a jar archive of the native libs&) {
destinationDir file(&$projectDir/libs&)
baseName &Native_Libs2&
extension &jar&
from fileTree(dir: &libs&, include: &**/*.so&)
into &lib&
自定义一个任务,在其中指定项目所依赖的so文件的目录,这里用了**/*.so来写,为了省事,指定需要拷入的目录 into &lib&,那么动态运行库就被拷入到lib目录中。
完整的build.gradle文件如下:
完整的build.gradle文件如下:
apply plugin: 'com.android.application'
compileSdkVersion 23
buildToolsVersion &23.0.1&
packagingOptions{
exclude'META-INF/LICENSE.txt'
exclude'META-INF/NOTICE.txt'
defaultConfig {
applicationId &com.zyx&
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName &1.0&
buildTypes {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
task nativeLibsToJar(type: Zip, description: &create a jar archive of the native libs&) {
destinationDir file(&$projectDir/libs&)
baseName &Native_Libs2&
extension &jar&
from fileTree(dir: &libs&, include: &**/*.so&)
into &lib&
tasks.withType(JavaCompile) {
compileTask -& compileTask.dependsOn(nativeLibsToJar)
repositories{
dirs 'libs' //就是你放aar的目录地址
maven { url &https://jitpack.io& }
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.1.0'
compile files('libs/commons-codec-1.6.jar')
compile files('libs/commons-logging-1.1.1.jar')
compile files('libs/fluent-hc-4.2.5.jar')
compile files('libs/httpclient-4.2.5.jar')
compile files('libs/httpclient-cache-4.2.5.jar')
compile files('libs/httpcore-4.2.4.jar')
compile files('libs/httpmime-4.2.5.jar')
compile files('libs/libammsdk.jar')
compile files('libs/universal-image-loader-1.9.3-SNAPSHOT.jar')
compile files('libs/xUtils-2.6.14.jar')
compile project(':sideingmenu')
compile files('libs/MobCommons-29.jar')
compile files('libs/MobTools-29.jar')
compile name: 'SMSSDK-2.0.2', ext: 'aar'
compile name: 'SMSSDKGUI-2.0.2', ext: 'aar'
compile 'in.srain.cube:ultra-ptr:1.0.7@aar'
compile project(':pull')
compile 'com.github.PhilJay:MPAndroidChart:v2.2.4'
compile files('libs/ipaynow_alipay_v1.0.1.jar')
compile files('libs/ipaynow_base_v1.3.5.jar')
compile files('libs/ipaynow_qq_v1.0.0.jar')
compile files('libs/ipaynow_upmp_v1.0.2.jar')
compile files('libs/ipaynow_wechatwp_v1.0.1.jar')
compile files('libs/Sunflower.jar')
compile files('libs/zxing.jar')
二,就正式进入开发
1.设置全局的application,如此就不用再每个活动中初始百度sdk了
package com.zyx.map;
import android.app.Application;
import com.baidu.mapapi.SDKInitializer;
* Created by zyx on .
public class MyApplication extends Application {
public void onCreate() {
super.onCreate();
// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
SDKInitializer.initialize(this);
2.MainActivity,源码
package com.zyx.map;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;
public class MainActivity extends Activity implements OnClickListener{
private Button bt_local;
private Button bt_guide;
private Button bt_city;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_local = (Button) findViewById(R.id.bt_local);
bt_guide = (Button) findViewById(R.id.bt_guide);
bt_city = (Button) findViewById(R.id.bt_city);
bt_local.setOnClickListener(this);
bt_guide.setOnClickListener(this);
bt_city.setOnClickListener(this);
public void onClick(View v) {
switch (v.getId()){
case R.id.bt_local:
Intent i = new Intent(MainActivity.this,LocationDemo.class);
startActivity(i);
case R.id.bt_guide:
i = new Intent(MainActivity.this,RoutePlanDemo.class);
startActivity(i);
case R.id.bt_city:
i = new Intent(MainActivity.this,DistrictSearchDemo.class);
startActivity(i);
3.定位 源码
package com.zyx.map;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Toast;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
* 此demo用来展示如何结合定位SDK实现定位,并使用MyLocationOverlay绘制定位位置 同时展示如何使用自定义图标绘制并点击时弹出泡泡
public class LocationDemo extends Activity {
// 定位相关
LocationClient mLocClient;
public MyLocationListenner myListener = new MyLocationListenner();
private LocationMode mCurrentMode;
BitmapDescriptor mCurrentMarker;
private static final int accuracyCircleFillColor = 0xAAFFFF88;
private static final int accuracyCircleStrokeColor = 0xAA00FF00;
MapView mMapView;
BaiduMap mBaiduMap;
OnCheckedChangeListener radioButtonListener;
Button requestLocButton;
boolean isFirstLoc =
// 是否首次定位
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location);
requestLocButton = (Button) findViewById(R.id.button1);
mCurrentMode = LocationMode.NORMAL;
requestLocButton.setText(&普通&);
OnClickListener btnClickListener = new OnClickListener() {
public void onClick(View v) {
switch (mCurrentMode) {
case NORMAL:
requestLocButton.setText(&跟随&);
mCurrentMode = LocationMode.FOLLOWING;
.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker));
case COMPASS:
requestLocButton.setText(&普通&);
mCurrentMode = LocationMode.NORMAL;
.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker));
case FOLLOWING:
requestLocButton.setText(&罗盘&);
mCurrentMode = LocationMode.COMPASS;
.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker));
requestLocButton.setOnClickListener(btnClickListener);
RadioGroup group = (RadioGroup) this.findViewById(R.id.radioGroup);
radioButtonListener = new OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == R.id.defaulticon) {
// 传入null则,恢复默认图标
mCurrentMarker =
.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, null));
if (checkedId == R.id.customicon) {
// 修改为自定义marker
mCurrentMarker = BitmapDescriptorFactory
.fromResource(R.mipmap.icon_geo);
.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker,
accuracyCircleFillColor, accuracyCircleStrokeColor));
group.setOnCheckedChangeListener(radioButtonListener);
// 地图初始化
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
// 定位初始化
mLocClient = new LocationClient(this);
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开gps
option.setCoorType(&bd09ll&); // 设置坐标类型
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); // 设置GPS优先
// 设置GPS优先
option.setScanSpan(1000);
option.setIsNeedAddress(true);
option.disableCache(true);//禁止启用缓存定位
mLocClient.setLocOption(option);
mLocClient.start();
mLocClient.requestLocation();
* 定位SDK监听函数
public class MyLocationListenner implements BDLocationListener {
public void onReceiveLocation(BDLocation location) {
// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null) {
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(&\nstreet : &);
sb.append(location.getStreet());
sb.append(&\nstreetNum : &);
sb.append(location.getStreetNumber());
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());
Log.e(&log&, sb.toString());
Log.e(&addr&, location.getAddrStr());
Toast.makeText(getApplicationContext(),location.getAddrStr()+&city&+location.getCity(),Toast.LENGTH_LONG).show();
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针<span style="color:#-360
.direction(100).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc =
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(ll).zoom(18.0f);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
public void onReceivePoi(BDLocation poiLocation) {
protected void onPause() {
mMapView.onPause();
super.onPause();
protected void onResume() {
mMapView.onResume();
super.onResume();
protected void onDestroy() {
// 退出时销毁定位
mLocClient.stop();
// 关闭定位图层
mBaiduMap.setMyLocationEnabled(false);
mMapView.onDestroy();
mMapView =
super.onDestroy();
4.导航全部源码
package com.zyx.map;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.Window;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.RouteLine;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.route.BikingRouteLine;
import com.baidu.mapapi.search.route.BikingRoutePlanOption;
import com.baidu.mapapi.search.route.BikingRouteResult;
import com.baidu.mapapi.search.route.DrivingRouteLine;
import com.baidu.mapapi.search.route.DrivingRoutePlanOption;
import com.baidu.mapapi.search.route.DrivingRouteResult;
import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener;
import com.baidu.mapapi.search.route.PlanNode;
import com.baidu.mapapi.search.route.RoutePlanSearch;
import com.baidu.mapapi.search.route.TransitRouteLine;
import com.baidu.mapapi.search.route.TransitRoutePlanOption;
import com.baidu.mapapi.search.route.TransitRouteResult;
import com.baidu.mapapi.search.route.WalkingRouteLine;
import com.baidu.mapapi.search.route.WalkingRoutePlanOption;
import com.baidu.mapapi.search.route.WalkingRouteResult;
import com.zyx.map.overlayutil.BikingRouteOverlay;
import com.zyx.map.overlayutil.DrivingRouteOverlay;
import com.zyx.map.overlayutil.OverlayManager;
import com.zyx.map.overlayutil.TransitRouteOverlay;
import com.zyx.map.overlayutil.WalkingRouteOverlay;
* 此demo用来展示如何进行驾车、步行、公交路线搜索并在地图使用RouteOverlay、TransitOverlay绘制
* 同时展示如何进行节点浏览并弹出泡泡
public class RoutePlanDemo extends Activity implements BaiduMap.OnMapClickListener,
OnGetRoutePlanResultListener {
EditText editSt;
EditText editEn;
// 浏览路线节点相关
Button mBtnPre =
// 上一个节点
Button mBtnNext =
// 下一个节点
int nodeIndex = -1; // 节点索引,供浏览节点时使用
RouteLine route =
OverlayManager routeOverlay =
boolean useDefaultIcon =
private TextView popupText =
// 泡泡view
// 地图相关,使用继承MapView的MyRouteMapView目的是重写touch事件实现泡泡处理
// 如果不处理touch事件,则无需继承,直接使用MapView即可
MapView mMapView =
// 地图View
BaiduMap mBaidumap =
// 搜索相关
RoutePlanSearch mSearch =
// 搜索模块,也可去掉地图模块独立使用
// 定位相关
LocationClient mLocClient;
public MyLocationListenner myListener = new MyLocationListenner();
private MyLocationConfiguration.LocationMode mCurrentMode;
BitmapDescriptor mCurrentMarker;
private static final int accuracyCircleFillColor = 0xAAFFFF88;
private static final int accuracyCircleStrokeColor = 0xAA00FF00;
boolean isFirstLoc =
// 是否首次定位
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_routeplan);
CharSequence titleLable = &路线规划功能&;
setTitle(titleLable);
// 初始化地图
mMapView = (MapView) findViewById(R.id.map);
mBaidumap = mMapView.getMap();
// 处理搜索按钮响应
editSt = (EditText) findViewById(R.id.start);
editEn = (EditText) findViewById(R.id.end);
initlocal();
mBtnPre = (Button) findViewById(R.id.pre);
mBtnNext = (Button) findViewById(R.id.next);
mBtnPre.setVisibility(View.INVISIBLE);
mBtnNext.setVisibility(View.INVISIBLE);
// 地图点击事件处理
mBaidumap.setOnMapClickListener(this);
// 初始化搜索模块,注册事件监听
mSearch = RoutePlanSearch.newInstance();
mSearch.setOnGetRoutePlanResultListener(this);
* 定位初始化
private void initlocal() {
// 开启定位图层
mBaidumap.setMyLocationEnabled(true);
// 定位初始化
mLocClient = new LocationClient(this);
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开gps
option.setCoorType(&bd09ll&); // 设置坐标类型
option.setPriority(LocationClientOption.GpsFirst); // 设置GPS优先
// 设置GPS优先
option.setScanSpan(1000);
option.setIsNeedAddress(true);
option.disableCache(true);//禁止启用缓存定位
mLocClient.setLocOption(option);
mLocClient.start();
mLocClient.requestLocation();
* 发起路线规划搜索示例
* @param v
public void searchButtonProcess(View v) {
// 重置浏览节点的路线数据
mBtnPre.setVisibility(View.INVISIBLE);
mBtnNext.setVisibility(View.INVISIBLE);
mBaidumap.clear();
// 设置起终点信息,对于tranist search 来说,城市名无意义
PlanNode stNode = PlanNode.withCityNameAndPlaceName(&杭州&, editSt.getText().toString());
PlanNode enNode = PlanNode.withCityNameAndPlaceName(&杭州&, editEn.getText().toString());
// 实际使用中请对起点终点城市进行正确的设定
if (v.getId() == R.id.drive) {
mSearch.drivingSearch((new DrivingRoutePlanOption())
.from(stNode).to(enNode));
} else if (v.getId() == R.id.transit) {
mSearch.transitSearch((new TransitRoutePlanOption())
.from(stNode).city(&北京&).to(enNode));
} else if (v.getId() == R.id.walk) {
mSearch.walkingSearch((new WalkingRoutePlanOption())
.from(stNode).to(enNode));
} else if (v.getId() == R.id.bike) {
mSearch.bikingSearch((new BikingRoutePlanOption())
.from(stNode).to(enNode));
* 节点浏览示例
* @param v
public void nodeClick(View v) {
if (route == null || route.getAllStep() == null) {
if (nodeIndex == -1 && v.getId() == R.id.pre) {
// 设置节点索引
if (v.getId() == R.id.next) {
if (nodeIndex & route.getAllStep().size() - 1) {
nodeIndex&#43;&#43;;
} else if (v.getId() == R.id.pre) {
if (nodeIndex & 0) {
nodeIndex--;
// 获取节结果信息
LatLng nodeLocation =
String nodeTitle =
Object step = route.getAllStep().get(nodeIndex);
if (step instanceof DrivingRouteLine.DrivingStep) {
nodeLocation = ((DrivingRouteLine.DrivingStep) step).getEntrance().getLocation();
nodeTitle = ((DrivingRouteLine.DrivingStep) step).getInstructions();
} else if (step instanceof WalkingRouteLine.WalkingStep) {
nodeLocation = ((WalkingRouteLine.WalkingStep) step).getEntrance().getLocation();
nodeTitle = ((WalkingRouteLine.WalkingStep) step).getInstructions();
} else if (step instanceof TransitRouteLine.TransitStep) {
nodeLocation = ((TransitRouteLine.TransitStep) step).getEntrance().getLocation();
nodeTitle = ((TransitRouteLine.TransitStep) step).getInstructions();
} else if (step instanceof BikingRouteLine.BikingStep) {
nodeLocation = ((BikingRouteLine.BikingStep) step).getEntrance().getLocation();
nodeTitle = ((BikingRouteLine.BikingStep) step).getInstructions();
if (nodeLocation == null || nodeTitle == null) {
// 移动节点至中心
mBaidumap.setMapStatus(MapStatusUpdateFactory.newLatLng(nodeLocation));
// show popup
popupText = new TextView(RoutePlanDemo.this);
popupText.setBackgroundResource(R.drawable.popup);
popupText.setTextColor(0xFF000000);
popupText.setText(nodeTitle);
mBaidumap.showInfoWindow(new InfoWindow(popupText, nodeLocation, 0));
* 切换路线图标,刷新地图使其生效
* 注意: 起终点图标使用中心对齐.
public void changeRouteIcon(View v) {
if (routeOverlay == null) {
if (useDefaultIcon) {
((Button) v).setText(&自定义起终点图标&);
Toast.makeText(this,
&将使用系统起终点图标&,
Toast.LENGTH_SHORT).show();
((Button) v).setText(&系统起终点图标&);
Toast.makeText(this,
&将使用自定义起终点图标&,
Toast.LENGTH_SHORT).show();
useDefaultIcon = !useDefaultIcon;
routeOverlay.removeFromMap();
routeOverlay.addToMap();
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
public void onGetWalkingRouteResult(WalkingRouteResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(RoutePlanDemo.this, &抱歉,未找到结果&, Toast.LENGTH_SHORT).show();
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
// result.getSuggestAddrInfo()
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
nodeIndex = -1;
mBtnPre.setVisibility(View.VISIBLE);
mBtnNext.setVisibility(View.VISIBLE);
route = result.getRouteLines().get(0);
WalkingRouteOverlay overlay = new MyWalkingRouteOverlay(mBaidumap);
mBaidumap.setOnMarkerClickListener(overlay);
routeOverlay = overlay;
overlay.setData(result.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
public void onGetTransitRouteResult(TransitRouteResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(RoutePlanDemo.this, &抱歉,未找到结果&, Toast.LENGTH_SHORT).show();
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
// result.getSuggestAddrInfo()
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
nodeIndex = -1;
mBtnPre.setVisibility(View.VISIBLE);
mBtnNext.setVisibility(View.VISIBLE);
route = result.getRouteLines().get(0);
TransitRouteOverlay overlay = new MyTransitRouteOverlay(mBaidumap);
mBaidumap.setOnMarkerClickListener(overlay);
routeOverlay = overlay;
overlay.setData(result.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
public void onGetDrivingRouteResult(DrivingRouteResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(RoutePlanDemo.this, &抱歉,未找到结果&, Toast.LENGTH_SHORT).show();
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
// result.getSuggestAddrInfo()
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
nodeIndex = -1;
mBtnPre.setVisibility(View.VISIBLE);
mBtnNext.setVisibility(View.VISIBLE);
route = result.getRouteLines().get(0);
DrivingRouteOverlay overlay = new MyDrivingRouteOverlay(mBaidumap);
routeOverlay = overlay;
mBaidumap.setOnMarkerClickListener(overlay);
overlay.setData(result.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {
if (bikingRouteResult == null || bikingRouteResult.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(RoutePlanDemo.this, &抱歉,未找到结果&, Toast.LENGTH_SHORT).show();
if (bikingRouteResult.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
// result.getSuggestAddrInfo()
if (bikingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) {
nodeIndex = -1;
mBtnPre.setVisibility(View.VISIBLE);
mBtnNext.setVisibility(View.VISIBLE);
route = bikingRouteResult.getRouteLines().get(0);
BikingRouteOverlay overlay = new MyBikingRouteOverlay(mBaidumap);
routeOverlay = overlay;
mBaidumap.setOnMarkerClickListener(overlay);
overlay.setData(bikingRouteResult.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
// 定制RouteOverly
private class MyDrivingRouteOverlay extends DrivingRouteOverlay {
public MyDrivingRouteOverlay(BaiduMap baiduMap) {
super(baiduMap);
public BitmapDescriptor getStartMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
public BitmapDescriptor getTerminalMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
private class MyWalkingRouteOverlay extends WalkingRouteOverlay {
public MyWalkingRouteOverlay(BaiduMap baiduMap) {
super(baiduMap);
public BitmapDescriptor getStartMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
public BitmapDescriptor getTerminalMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
private class MyTransitRouteOverlay extends TransitRouteOverlay {
public MyTransitRouteOverlay(BaiduMap baiduMap) {
super(baiduMap);
public BitmapDescriptor getStartMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
public BitmapDescriptor getTerminalMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
private class MyBikingRouteOverlay extends BikingRouteOverlay {
MyBikingRouteOverlay(BaiduMap baiduMap) {
super(baiduMap);
public BitmapDescriptor getStartMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
public BitmapDescriptor getTerminalMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
public void onMapClick(LatLng point) {
mBaidumap.hideInfoWindow();
public boolean onMapPoiClick(MapPoi poi) {
protected void onPause() {
mMapView.onPause();
super.onPause();
protected void onResume() {
mMapView.onResume();
super.onResume();
protected void onDestroy() {
mSearch.destroy();
mMapView.onDestroy();
super.onDestroy();
* 定位SDK监听函数
public class MyLocationListenner implements BDLocationListener {
public void onReceiveLocation(BDLocation location) {
// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null) {
editSt.setText(location.getStreet());
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针<span style="color:#-360
.direction(100).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaidumap.setMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc =
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(ll).zoom(18.0f);
mBaidumap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
public void onReceivePoi(BDLocation poiLocation) {
最后 全部源码地址下载 &http://download.csdn.net/detail/yangxin
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2957次
排名:千里之外
(1)(1)(1)(1)(3)(1)(1)

我要回帖

更多关于 小米路由器硬盘访问 的文章

 

随机推荐