oppor9s和苹果6那个好和oppor11哪个好

百度地图总结第三篇之定位(我的位置) - 简书
百度地图总结第三篇之定位(我的位置)
百度地图总结第三篇之定位(我的位置)
使用百度定位SDK获取相应的位置信息,然后利用地图SDK中的接口,您可以在地在这里提示一下,如果是在一个工程中同时使用定位的SDK和百度地图SDK,可以共同使用一个key,如果新创建工程,那么就要去重新申请key了,申请方式一样,如有疑问可以看看
集成定位SDK:
然后我们看下集成文档,下载相应的定位SDK,解压出来,我们把需要的jar包添加到libs目录下(BaiduLBS_Android.jar),然后我们把.so库文件放到我们之前的jniLibs目录下(注意文件名一定要对应才行)
最后来看看我们的AndroidMainfest.xml文件中的逻辑吧。
在application标签中声明service组件,每个app拥有自己单独的定位service
&service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"&
&/service&
【重要提醒】定位SDKv3.1版本之后,以下权限已不需要,请取消声明,否则将由于Android 5.0多帐户系统加强权限管理而导致应用安装失败。 &uses-permission
android:name="android.permission.BAIDU_LOCATION_SERVICE"&&/uses-permission&
使用相关权限(如果使用的有百度地图的,那么权限有可能重复,删除即可):
&!-- 这个权限用于进行网络定位--&
&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(如果之前有百度地图的key,那么这一步就可以省略了):
SDK4.2及之后版本需要在Mainfest.xml设置Accesskey,设置有误会引起定位和地理围栏服务不能正常使用,必须进行Accesskey的正确设置。设置AccessKey,在application标签中加入
&meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="key" /&
//key:开发者申请的key
使用综合定位功能,开始定位功能的实现
综合定位功能指的根据用户实际需求,返回用户当前位置的基础定位服务。包含GPS和网络定位(Wi-Fi和基站定位)功能。基本定位功能同时还支持结合定位结果的反地理编码功能,离线定位,位置提醒功能和位置语义化功能。
第一步,初始化LocationClient类:
此处需要注意:LocationClient类必须在主线程中声明。需要Context类型的参数。Context需要时全进程有效的context,推荐用getApplicationConext获取全进程有效的context
public LocationClient mLocationClient =
public BDLocationListener myListener = new MyLocationListener();
public void onCreate() {
mLocationClient = new LocationClient(getApplicationContext());
//声明LocationClient类
mLocationClient.registerLocationListener( myListener );
//注册监听函数
第二步,配置定位SDK参数:
设置定位参数包括:定位模式(高精度定位模式,低功耗定位模式和仅用设备定位模式),返回坐标类型,是否打开GPS,是否返回地址信息、位置语义化信息、POI信息等等。
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
int span = 5000; //5秒发送一次
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仿真结果,默认需要
option.setNeedDeviceDirect(true); //返回的定位结果包含手机机头方向
mLocationClient.setLocOption(option);
mLocationClient.start(); //启动位置请求
mLocationClient.requestLocation();//发送请求
高精度定位模式:这种定位模式下,会同时使用网络定位和GPS定位,优先返回最高精度的定位结果;
低功耗定位模式:这种定位模式下,不会使用GPS,只会使用网络定位(Wi-Fi和基站定位);
仅用设备定位模式:这种定位模式下,不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位。第三步,实现BDLocationListener接口:
* 位置监听器
* BDLocationListener接口有1个方法需要实现: 1.接收异步返回的定位结果,参数是BDLocation类型参数。
class MyLocationListener implements BDLocationListener {
* 接收位置的信息回调方法
* @param location
public void onReceiveLocation(BDLocation location) {
if (location == 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());
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.d("BaiduLocationApiDem", sb.toString());
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.mipmap.icon_gcoding);
//创建一个图层选项
LatLng latlng = new LatLng(location.getLatitude(), location.getLongitude());
OverlayOptions options = new MarkerOptions().position(latlng).icon(bitmapDescriptor);
mBaiduMap.addOverlay(options);
MapStatus mMapStatus = new MapStatus.Builder()
.target(latlng)
//定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
//改变地图状态
mBaiduMap.setMapStatus(mMapStatusUpdate);
善后工作之获取error code:
public int getLocType ( )
这里基本上就可以了,下面我们来看下定位效果吧(不小心暴漏了。。。):
下面我们看下完整的代码吧。
package com.example.
import android.support.v7.app.AppCompatA
import android.os.B
import android.util.L
import android.view.V
import android.widget.B
import com.baidu.mapapi.map.BaiduM
import com.baidu.mapapi.map.BitmapD
import com.baidu.mapapi.map.BitmapDescriptorF
import com.baidu.mapapi.map.MapS
import com.baidu.mapapi.map.MapStatusU
import com.baidu.mapapi.map.MapStatusUpdateF
import com.baidu.mapapi.map.MapV
import com.baidu.location.BDL
import com.baidu.location.BDLocationL
import com.baidu.location.LocationC
import com.baidu.location.LocationClientO
import com.baidu.location.BDNotifyL//假如用到位置提醒功能,需要import该类
import com.baidu.location.P
import com.baidu.mapapi.map.MarkerO
import com.baidu.mapapi.map.OverlayO
import com.baidu.mapapi.model.LatL
import java.util.L
public class MyLocation extends AppCompatActivity implements View.OnClickListener {
//第一步,初始化LocationClient类
private LocationClient mLocationClient =
private Button startL
private MapView mapV
private BaiduMap mBaiduM
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_location);
startLocation = (Button) findViewById(R.id.startLocation);
startLocation.setOnClickListener(this);
mapView = (MapView) findViewById(R.id.mapView);
mBaiduMap = mapView.getMap();
//普通地图
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
BDLocationListener listener = new MyLocationListener();
//此处需要注意:LocationClient类必须在主线程中声明。需要Context类型的参数。
//Context需要时全进程有效的context,推荐用getApplicationConext获取全进程有效的context
mLocationClient = new LocationClient(getApplicationContext());
//注册位置监听器
mLocationClient.registerLocationListener(listener);
* 位置监听器
* BDLocationListener接口有1个方法需要实现: 1.接收异步返回的定位结果,参数是BDLocation类型参数。
class MyLocationListener implements BDLocationListener {
* 接收位置的信息回调方法
* @param location
public void onReceiveLocation(BDLocation location) {
if (location == 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());
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.d("BaiduLocationApiDem", sb.toString());
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.mipmap.icon_gcoding);
//创建一个图层选项
LatLng latlng = new LatLng(location.getLatitude(), location.getLongitude());
OverlayOptions options = new MarkerOptions().position(latlng).icon(bitmapDescriptor);
mBaiduMap.addOverlay(options);
MapStatus mMapStatus = new MapStatus.Builder()
.target(latlng)
//定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
//改变地图状态
mBaiduMap.setMapStatus(mMapStatusUpdate);
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mapView.onDestroy();
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mapView.onResume();
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mapView.onPause();
* 请求我的位置信息
* @param v
public void onClick(View v) {
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
int span = 5000; //5秒发送一次
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仿真结果,默认需要
option.setNeedDeviceDirect(true); //返回的定位结果包含手机机头方向
mLocationClient.setLocOption(option);
mLocationClient.start(); //启动位置请求
mLocationClient.requestLocation();//发送请求
小弟也是刚学习,如有什么错误之处,还请大神手下留情,指出错误之处,共同学习。2643人阅读
百度地图开发(7)
定位和搜索的核心类请看该系列的前面几篇文章,导航的核心类是BaiduNaviManager,该类的核心方法包括:
initEngine初始化导航引擎
createNMapView创建NMapView
launchNavigator启动导航
核心接口是OnStartNavigationListener(),启动导航的监听器,跳转到基于sdk自定义的[导航页]
另外需新建一个activity,用于实现百度自定义的导航视图.详细代码如下:
&RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.yuneec.yuneecmap.MainActivity" &
&com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/ll"
android:clickable="true" /&
&LinearLayout
android:id="@+id/ll"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" &
android:id="@+id/location"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/test"
android:textSize="20sp" /&
android:id="@+id/search"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/search"
android:textSize="20sp" /&
android:id="@+id/navi"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/navi"
android:textSize="20sp" /&
&/LinearLayout&
&/RelativeLayout&
import android.app.A
import android.content.I
import android.os.B
import android.os.E
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.T
import com.baidu.location.BDL
import com.baidu.location.BDLocationL
import com.baidu.location.LocationC
import com.baidu.location.LocationClientO
import com.baidu.location.LocationClientOption.LocationM
import com.baidu.mapapi.SDKI
import com.baidu.mapapi.map.BaiduM
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickL
import com.baidu.mapapi.map.BitmapD
import com.baidu.mapapi.map.BitmapDescriptorF
import com.baidu.W
import com.baidu.Window.OnInfoWindowClickL
import com.baidu.mapapi.map.MapS
import com.baidu.mapapi.map.MapStatusU
import com.baidu.mapapi.map.MapStatusUpdateF
import com.baidu.mapapi.map.MapV
import com.baidu.mapapi.map.M
import com.baidu.mapapi.map.MyLocationD
import com.baidu.mapapi.model.LatL
import com.baidu.mapapi.overlayutil.PoiO
import com.baidu.mapapi.search.core.PoiI
import com.baidu.mapapi.search.core.SearchR
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultL
import com.baidu.mapapi.search.poi.PoiDetailR
import com.baidu.mapapi.search.poi.PoiDetailSearchO
import com.baidu.mapapi.search.poi.PoiNearbySearchO
import com.baidu.mapapi.search.poi.PoiR
import com.baidu.mapapi.search.poi.PoiS
import com.baidu.navisdk.BNaviEngineManager.NaviEngineInitL
import com.baidu.navisdk.BaiduNaviM
import com.baidu.navisdk.BaiduNaviManager.OnStartNavigationL
import com.api.routeplan.RoutePlanParams.NE_RoutePlan_M
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private boolean mIsEngineInitSuccess = false;
private NaviEngineInitListener mNaviEngineInitListener = new NaviEngineInitListener() {
public void engineInitSuccess() {
mIsEngineInitSuccess=true;
public void engineInitStart() {
public void engineInitFail() {
private String getSdcardDir() {
if (Environment.getExternalStorageState().equalsIgnoreCase(
Environment.MEDIA_MOUNTED)) {
return Environment.getExternalStorageDirectory().toString();
return null;
private MapView mMapV
private BaiduMap mBaiduM
private MapStatus mMapS
private MapStatusUpdate mMapStatusU
private Button btn_
private Button btn_
private Button btn_
public LocationClient mLocationClient = null;
public BDLocationListener myLocationListener = new MyLocationListener();
private LatLng mCurrentLatL
private double
private double
private PoiSearch mPoiS
private MySearchResultListener mySearchResultL
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
btn_search.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
btn_location.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
location();
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
mMapStatus = new MapStatus.Builder().zoom(15)
.target(mCurrentLatLng).build();
mMapStatusUpdate = MapStatusUpdateFactory
.newMapStatus(mMapStatus);
mBaiduMap.setMapStatus(mMapStatusUpdate);
btn_navi.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(mIsEngineInitSuccess){
private void init() {
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
mLocationClient = new LocationClient(getApplicationContext());
myLocationListener = new MyLocationListener();
btn_location = (Button) findViewById(R.id.location);
mBaiduMap.setMyLocationEnabled(true);
mPoiSearch = PoiSearch.newInstance();
mySearchResultListener = new MySearchResultListener();
btn_search = (Button) findViewById(R.id.search);
btn_navi=(Button) findViewById(R.id.navi);
BaiduNaviManager.getInstance().initEngine(this, getSdcardDir()
, mNaviEngineInitListener, null);
private void location() {
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);
option.setCoorType("bd09ll");
option.setScanSpan(3000);
option.setIsNeedAddress(true);
option.setNeedDeviceDirect(true);
option.setOpenGps(true);
mLocationClient.setLocOption(option);
mLocationClient.registerLocationListener(myLocationListener);
public class MyLocationListener implements BDLocationListener {
public void onReceiveLocation(BDLocation location) {
if (location == null || mMapView == null)
latitude=location.getLatitude();
longitude=location.getLongitude();
mCurrentLatLng = new LatLng(location.getLatitude(),
location.getLongitude());
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
.latitude(location.getLatitude())
.longitude(location.getLongitude())
mBaiduMap.setMyLocationData(locData);
private void search() {
mPoiSearch.setOnGetPoiSearchResultListener(mySearchResultListener);
PoiNearbySearchOption pnso = new PoiNearbySearchOption();
pnso.keyword("美食");
pnso.location(mCurrentLatLng);
pnso.radius(1000);
mPoiSearch.searchNearby(pnso);
public class MySearchResultListener implements OnGetPoiSearchResultListener {
public void onGetPoiDetailResult(final PoiDetailResult poiDetailResult) {
if (poiDetailResult.error != SearchResult.ERRORNO.NO_ERROR) {
mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {
private BitmapD
public boolean onMarkerClick(Marker arg0) {
Button btn = new Button(getApplicationContext());
btn.setBackgroundColor(0xAA00FF00);
btn.setText(poiDetailResult.getName());
descriptor = BitmapDescriptorFactory.fromView(btn);
InfoWindow mInfoWindow = new InfoWindow(descriptor,
poiDetailResult.getLocation(), -60,
new OnInfoWindowClickListener() {
public void onInfoWindowClick() {
mBaiduMap.hideInfoWindow();
mBaiduMap.showInfoWindow(mInfoWindow);
return false;
public void onGetPoiResult(PoiResult poiResult) {
if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) {
if (poiResult != null) {
mBaiduMap.clear();
MyPoiOverlay poiOverlay = new MyPoiOverlay(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(poiOverlay);
poiOverlay.setData(poiResult);
poiOverlay.addToMap();
poiOverlay.zoomToSpan();
Toast.makeText(getApplicationContext(), "无结果",
Toast.LENGTH_SHORT).show();
class MyPoiOverlay extends PoiOverlay {
public MyPoiOverlay(BaiduMap baiduMap) {
super(baiduMap);
public boolean onPoiClick(int index) {
super.onPoiClick(index);
PoiInfo poi = getPoiResult().getAllPoi().get(index);
mPoiSearch.searchPoiDetail((new PoiDetailSearchOption())
.poiUid(poi.uid));
return super.onPoiClick(index);
protected void navi() {
BaiduNaviManager.getInstance().launchNavigator(this
, latitude
, longitude
, "demo公司"
, 32.332000
, 120.265000
, new city"
, NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME//算路方式
, BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY//强制离线优先
, new OnStartNavigationListener(){
//启动导航的监听器,由开发者实现跳转到基于SDK自定义的[离线数据下载页]
public void onJumpToDownloader() {
//启动导航的监听器,由开发者实现跳转到基于SDK自定义的[导航页]
public void onJumpToNavigator(Bundle configParams) {
Intent intent=new Intent(MainActivity.this,BNavigatorActivity.class);
intent.putExtras(configParams);
startActivity(intent);
protected void onStart() {
location();
mLocationClient.start();// 开启定位请求
super.onStart();
protected void onResume() {
mMapView.onResume();
super.onResume();
protected void onPause() {
mLocationClient.stop();// 停止定位
mMapView.onPause();
super.onPause();
protected void onDestroy() {
mMapView.onDestroy();
super.onDestroy();
import com.baidu.navisdk.BaiduNaviM
import com.api.mapcontrol.BNMapC
import com.api.routeplan.BNRouteP
import com.api.tts.BNTTSP
import com.api.tts.BNavigatorTTSP
import com.api.tts.IBNTTSPlayerL
import com.baidu.navisdk.model.datastruct.LocD
import com.baidu.navisdk.model.datastruct.SensorD
import com.baidu.navisdk.ui.routeguide.BN
import com.baidu.navisdk.ui.routeguide.IBNavigatorL
import com.baidu.navisdk.ui.widget.RoutePlanO
import com.baidu.navisdk.ui.widget.RoutePlanObserver.IJumpToDownloadL
import com.api.map.MapGLSurfaceV
import android.app.A
import android.content.res.C
import android.os.B
import android.view.V
public class BNavigatorActivity extends Activity {
private IBNavigatorListener mBNavigatorListener=new IBNavigatorListener() {
public void onYawingRequestSuccess() {
public void onYawingRequestStart() {
public void onPageJump(int jumpTiming, Object arg1) {
if(IBNavigatorListener.PAGE_JUMP_WHEN_GUIDE_END==jumpTiming){
}else if(IBNavigatorListener.PAGE_JUMP_WHEN_ROUTE_PLAN_FAIL==jumpTiming){
public void notifyViewModeChanged(int arg0) {
public void notifyStartNav() {
public void notifySensorData(SensorData arg0) {
public void notifyNmeaData(String arg0) {
public void notifyLoacteData(LocData arg0) {
public void notifyGPSStatusData(int arg0) {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MapGLSurfaceView nMapView = BaiduNaviManager.getInstance().createNMapView(this);
nMapView.setSatellite(true);
View navigatorView = BNavigator.getInstance().init(BNavigatorActivity.this, getIntent().getExtras(), nMapView);
setContentView(navigatorView);
BNavigator.getInstance().setListener(mBNavigatorListener);
BNavigator.getInstance().startNav();
BNTTSPlayer.initPlayer();
BNavigatorTTSPlayer.setTTSPlayerListener(new IBNTTSPlayerListener() {
public int playTTSText(String arg0, int arg1) {
return BNTTSPlayer.playTTSText(arg0, arg1);
public void phoneHangUp() {
public void phoneCalling() {
public int getTTSState() {
return BNTTSPlayer.getTTSState();
BNRoutePlaner.getInstance().setObserver(new RoutePlanObserver(this,
new IJumpToDownloadListener() {
public void onJumpToDownloadOfflineData() {
public void onResume() {
BNavigator.getInstance().resume();
super.onResume();
BNMapController.getInstance().onResume();
public void onPause() {
BNavigator.getInstance().pause();
super.onPause();
BNMapController.getInstance().onPause();
public void onConfigurationChanged(Configuration newConfig) {
BNavigator.getInstance().onConfigurationChanged(newConfig);
super.onConfigurationChanged(newConfig);
public void onBackPressed(){
BNavigator.getInstance().onBackPressed();
public void onDestroy(){
BNavigator.destory();
BNRoutePlaner.getInstance().setObserver(null);
super.onDestroy();
此demo已上传csdn,下载地址为:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:11329次
排名:千里之外
原创:17篇
(2)(2)(11)(2)

我要回帖

更多关于 oppor9s和苹果6那个好 的文章

 

随机推荐