在相关下载里下载最新的库文件。将so文件的压缩文件解压出来,把对应架构下的so文件放入开发者自己APP的对应架构下的文件夹中(建议全部放入以提高程序兼容性),将locSDK_6.X.jar文件拷贝到工程的libs目录下,这样您就可以在程序中使用百度定位SDK了。


使用eclipse开发的开发者,只需要将SO的文件夹放到libs下即可;使用AndroidStutio的开发者除了上述操作,还需要在build.gradle中配置SO的使用,如下所示:sourceSets {main {jniLibs.srcDirs = ['libs']}
}开发者如果开发的是系统应用,则只在工程中配置SO还是不够的,还需要手动把对应架构的SO拷贝到/system/lib下,如果是64位系统的话需要将64位的SO拷贝到/sytem/lib64下。注意:每次新版本的定位SDK,开发者除了要更新JAR包之外,也要注意一下SO有无更新,如果SO名称不一样了,也要及时替换老的SO版本,不然会导致定位失败!
设置AndroidManifest.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>设置AcessKeySDK4.2及之后版本需要在Mainfest.xml设置Accesskey,设置有误会引起定位和地理围栏服务不能正常使用,必须进行Accesskey的正确设置。设置AccessKey,在application标签中加入<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="key" />       //key:开发者申请的keyimport相关类import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.BDNotifyListener;//假如用到位置提醒功能,需要import该类
import com.baidu.location.Poi;
import java.util.List;import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Point;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
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.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMapClickListener;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.imooc.baidumap.MyOrientationListener.OnOrientationListener;public class MainActivity extends Activity {/*** @Field @mMapView : TODO(XML中用于显示地图的控件)*/private MapView mMapView;/*** @Field @mBaiduMap : TODO(定义 BaiduMap 地图对象的操作方法与接口)*/private BaiduMap mBaiduMap;private Context context;// 定位相关private LocationClient mLocationClient;private MyLocationListener mLocationListener;private boolean isFirstIn = true;private double mLatitude;private double mLongtitude;// 自定义定位图标private BitmapDescriptor mIconLocation;// bitmap 描述信息private MyOrientationListener myOrientationListener;private float mCurrentX;private LocationMode mLocationMode;// 覆盖物相关private BitmapDescriptor mMarker;private RelativeLayout mMarkerLy;/** (非 Javadoc) Description:* @see android.app.Activity#onCreate(android.os.Bundle)*/@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// requestWindowFeature(Window.FEATURE_NO_TITLE);// 在使用SDK各组件之前初始化context信息,传入ApplicationContext// 注意该方法要再setContentView方法之前实现// getWindow().setFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY,WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY);try {getWindow().addFlags(WindowManager.LayoutParams.class.getField("FLAG_NEEDS_MENU_KEY").getInt(null));} catch (NoSuchFieldException e) {// Ignore since this field won't exist in most versions of Android} catch (IllegalAccessException e) {Log.w("feelyou.info", "Could not access FLAG_NEEDS_MENU_KEY in addLegacyOverflowButton()", e);}SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);this.context = this;initView();// 初始化定位initLocation();initMarker();mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {// 设置地图 Marker 覆盖物点击事件监听者,自3.4.0版本起可设置多个监听对象,停止监听时调用removeMarkerClickListener移除监听对象@Overridepublic boolean onMarkerClick(Marker marker) {Bundle extraInfo = marker.getExtraInfo();Info info = (Info) extraInfo.getSerializable("info");ImageView iv = (ImageView) mMarkerLy.findViewById(R.id.id_info_img);TextView distance = (TextView) mMarkerLy.findViewById(R.id.id_info_distance);TextView name = (TextView) mMarkerLy.findViewById(R.id.id_info_name);TextView zan = (TextView) mMarkerLy.findViewById(R.id.id_info_zan);iv.setImageResource(info.getImgId());distance.setText(info.getDistance());name.setText(info.getName());zan.setText(info.getZan() + "");InfoWindow infoWindow;TextView tv = new TextView(context);tv.setBackgroundResource(R.drawable.location_tips);tv.setPadding(30, 20, 30, 50);tv.setText(info.getName());tv.setTextColor(Color.parseColor("#ffffff"));final LatLng latLng = marker.getPosition();Point p = mBaiduMap.getProjection().toScreenLocation(latLng);// 将地理坐标转换成屏幕坐标p.y -= 47;LatLng ll = mBaiduMap.getProjection().fromScreenLocation(p);// 将屏幕坐标转换成地理坐标infoWindow = new InfoWindow(tv, ll, new OnInfoWindowClickListener() {@Overridepublic void onInfoWindowClick() {mBaiduMap.hideInfoWindow();// 隐藏当前 InfoWindow}});mBaiduMap.showInfoWindow(infoWindow);// 显示 InfoWindowmMarkerLy.setVisibility(View.VISIBLE);return true;}});mBaiduMap.setOnMapClickListener(new OnMapClickListener() {// 设置地图单击事件监听者@Overridepublic boolean onMapPoiClick(MapPoi arg0) {return false;}@Overridepublic void onMapClick(LatLng arg0) {mMarkerLy.setVisibility(View.GONE);mBaiduMap.hideInfoWindow();// 隐藏当前 InfoWindow}});}private void initMarker() {mMarker = BitmapDescriptorFactory.fromResource(R.drawable.maker);mMarkerLy = (RelativeLayout) findViewById(R.id.id_maker_ly);}private void initLocation() {mLocationMode = LocationMode.NORMAL;mLocationClient = new LocationClient(this);mLocationListener = new MyLocationListener();mLocationClient.registerLocationListener(mLocationListener);LocationClientOption option = new LocationClientOption();option.setCoorType("bd09ll");option.setIsNeedAddress(true);option.setOpenGps(true);option.setScanSpan(1000);mLocationClient.setLocOption(option);// 初始化图标mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.navi_map_gps_locked);myOrientationListener = new MyOrientationListener(context);myOrientationListener.setOnOrientationListener(new OnOrientationListener() {@Overridepublic void onOrientationChanged(float x) {mCurrentX = x;}});}private void initView() {mMapView = (MapView) findViewById(R.id.id_bmapView);mBaiduMap = mMapView.getMap();MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);mBaiduMap.setMapStatus(msu);// 改变地图状态}@Overrideprotected void onResume() {super.onResume();// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理mMapView.onResume();}@Overrideprotected void onStart() {super.onStart();// 开启定位mBaiduMap.setMyLocationEnabled(true);// 设置是否允许定位图层if (!mLocationClient.isStarted())mLocationClient.start();// 开启方向传感器myOrientationListener.start();}@Overrideprotected void onPause() {super.onPause();// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onPause();}@Overrideprotected void onStop() {super.onStop();// 停止定位mBaiduMap.setMyLocationEnabled(false);mLocationClient.stop();// 停止方向传感器myOrientationListener.stop();}@Overrideprotected void onDestroy() {super.onDestroy();// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onDestroy();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.id_map_common:mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);// 设置地图类型 MAP_TYPE_NORMAL 普通图; MAP_TYPE_SATELLITE// 卫星图;MAP_TYPE_NONE 卫星图break;case R.id.id_map_site:mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);break;case R.id.id_map_traffic:if (mBaiduMap.isTrafficEnabled()) {// 获取是否打开交通图层mBaiduMap.setTrafficEnabled(false);// 设置是否打开交通图层item.setTitle("实时交通(off)");} else {mBaiduMap.setTrafficEnabled(true);item.setTitle("实时交通(on)");}break;case R.id.id_map_location:centerToMyLocation();break;case R.id.id_map_mode_common:mLocationMode = LocationMode.NORMAL;break;case R.id.id_map_mode_following:mLocationMode = LocationMode.FOLLOWING;break;case R.id.id_map_mode_compass:mLocationMode = LocationMode.COMPASS;break;case R.id.id_add_overlay:addOverlays(Info.infos);break;default:break;}return super.onOptionsItemSelected(item);}/*** 添加覆盖物* * @param infos*/private void addOverlays(List<Info> infos) {mBaiduMap.clear();// 清空地图所有的 Overlay 覆盖物以及 InfoWindowLatLng latLng = null;Marker marker = null;OverlayOptions options;for (Info info : infos) {// 经纬度latLng = new LatLng(info.getLatitude(), info.getLongitude());// 图标options = new MarkerOptions().position(latLng).icon(mMarker).zIndex(5);marker = (Marker) mBaiduMap.addOverlay(options);// 向地图添加一个 OverlayBundle arg0 = new Bundle();arg0.putSerializable("info", info);marker.setExtraInfo(arg0);}MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);mBaiduMap.setMapStatus(msu);// 改变地图状态}/*** 定位到我的位置*/private void centerToMyLocation() {LatLng latLng = new LatLng(mLatitude, mLongtitude);MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);mBaiduMap.animateMapStatus(msu);// 以动画方式更新地图状态,动画耗时 300 ms}private class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {MyLocationData data = new MyLocationData.Builder()//.direction(mCurrentX)//.accuracy(location.getRadius())//.latitude(location.getLatitude())//.longitude(location.getLongitude())//.build();mBaiduMap.setMyLocationData(data);// 设置定位数据, 只有先允许定位图层后设置数据才会生效,参见 setMyLocationEnabled(boolean)// 设置自定义图标MyLocationConfiguration config = new MyLocationConfiguration(mLocationMode, true, mIconLocation);mBaiduMap.setMyLocationConfigeration(config);// 设置定位图层配置信息,只有先允许定位图层后设置定位图层配置信息才会生效// 更新经纬度mLatitude = location.getLatitude();mLongtitude = location.getLongitude();if (isFirstIn) {LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);mBaiduMap.animateMapStatus(msu);// 以动画方式更新地图状态,动画耗时 300 msisFirstIn = false;Toast.makeText(context, location.getAddrStr(), Toast.LENGTH_SHORT).show();}}}}

Android 地图导航开发相关推荐

  1. android 地图导航开发思路,基础功能-导航组件-开发指南-Android 导航SDK | 高德地图API...

    预置条件 请在您工程的 AndroidManifest.xml 中配置声明导航组件 Activity: android:name="com.amap.api.navi.AmapRouteAc ...

  2. android 地图服务开发 INSTALL_FAILED_MISSING_SHARED_LIBRARY 错误解决

    android 地图服务开发 INSTALL_FAILED_MISSING_SHARED_LIBRARY 错误解决 地图服务开发中遇到此类错误大体分为以下两种情况解决:(论坛里大多都是属于第一种情况的 ...

  3. Android地图定位开发技术汇总

    Android地图定位开发技术汇总 由于课程需要,我查询了一些Android中的地图定位开发技术,该技术在理论课日常练习中应用到了模拟高德地图APP开发中,同时也运用到了实验课结业大作业--小农夫AP ...

  4. android百度地图例子,使用百度地图API进行Android地图应用开发(Eclipse)(示例代码)...

    随着基于位置的服务的兴起,地图类App呈现爆发趋势.随着而来的是地图供应商开放大量的API.供开发人员开发基于PC或者移动端的应用程序. 如今我们研究使用百度地图SDK进行Android项目的开发. ...

  5. Android 地图导航调用百度地图、高德地图、腾讯地图,腾讯T3团队整理

    前言 ============================================================= 为什么调用第三方呢?集成在App里面不行吗? 接入导航SDK,以百度为 ...

  6. Android 地图导航调用百度地图、高德地图、腾讯地图

    效果图 前言 为什么调用第三方呢?集成在App里面不行吗? 接入导航SDK,以百度为例,apk包体积能增加小几十兆之多,上一版本还是几兆的apk,迭代一版本直接几十兆了,落差之大,难以接受. 虽说当下 ...

  7. Android 地图导航调用百度地图、高德地图、腾讯地图,ffmpeg音视频开发实战5

    switch (view.getId()) { - case R.id.tv_navigation: showMapList(); break; } } 2,弹窗 ================== ...

  8. android 地图红包开发,Android红包精灵开源项目

    红包精灵,如果喜欢,点个star,开源不易. 应用市场效果图: 关键Service代码: 注:此前在15年12月时,用的Eclipse开发这个,后来没有时间切到AS上去,如运行在AS可以的话,可提pr ...

  9. (android 地图实战开发)4地图偏移量解决方案

     1  地图偏移量问题的来源: 国家出于安全考虑,为了不让重要的位置的地理信息暴露,在所有的电子地图服务提供商都需要给地图数据加上偏移和加密,所以我们在使用google,baidu 等电子地图服务商的 ...

最新文章

  1. python获取机器唯一标识_开发中常用工具 - 获取设备的唯一标识、UDID、UUID、keychain保存UUID、判断网络...
  2. ios 关于block传值报错
  3. django--02 模板的使用
  4. 请写出sfr和sbit的语句格式_单片机c语言的sbit和sfr
  5. 如何访问“我的网站”
  6. 数字后端——布图规划
  7. 修改Imdict做自己的分词器
  8. Play framework(二)
  9. 9、网络详解 学习笔记
  10. Jenkins 持续集成平台构建之通过git提交代码
  11. python中randint用法_python中的randint,引入模块
  12. Oracle 删除重复数据
  13. (转发)详解汽车UDS诊断协议(二)
  14. STM8S103之tim2PWM输出
  15. C++11: vector 初始化赋值
  16. scanf输入回车问题
  17. python批量下载网易云音乐音乐列表
  18. 漫谈程序员系列 薪资,你是我不能言说的伤
  19. 增量式与绝对值编码器的区别
  20. 无人驾驶技术入门(五)| 没有视觉传感器,还谈什么无人驾驶?

热门文章

  1. 2021年中国燃气表发展现状及进出口状况分析:随城镇化推进,燃气表市场规模有望扩大 [图]
  2. java pushlet_pushlet 之 Pushlet使用手把手实例
  3. 如何免费领取高德打车100元礼包?
  4. VMware Horizon 8 2303 - 虚拟桌面基础架构 (VDI) 和应用软件
  5. python在家怎么赚钱手工艺_在家可做的手工兼职有哪些?宝妈不去公司做什么赚钱?...
  6. php怎么安装模板_phpcms模板怎么安装
  7. 实例讲解内连接、左连接、右连接、交叉连接、外连接以及全连接
  8. siamese(孪生) 网络
  9. mac vim 终端命令
  10. H5创建一个简单的qq注册页面