Android简单实现百度地图显示及定位
2017-12-29 14:12
585 查看
1、下载百度地图的SDK
下载地址:http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download
2、申请key值
注册百度账号——>登录百度地图官网——>控制台—–>创建应用
获取key(也就是AK)的具体方法的官网地址 :http://lbsyun.baidu.com/apiconsole/key
3、通过解压得到.jar文件并放到libs文件中,手动添加到依赖库中(右键Add—-)
4、在src/main下建立一个叫做jniLibs的文件夹,并把解压后内的文件夹靠进去,如下图:
![](https://img-blog.csdn.net/20170209010923429?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29kZV9iZXR0ZXI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
代码实现
在工程的“ AndroidManifest.xml ”文件添加key和Service
添加权限(6.0权限另说)
activity.xml布局文件
Mainactivity.java代码实现
就是这么简单,希望留言讨论,谢谢!!!
下载地址:http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download
2、申请key值
注册百度账号——>登录百度地图官网——>控制台—–>创建应用
获取key(也就是AK)的具体方法的官网地址 :http://lbsyun.baidu.com/apiconsole/key
3、通过解压得到.jar文件并放到libs文件中,手动添加到依赖库中(右键Add—-)
4、在src/main下建立一个叫做jniLibs的文件夹,并把解压后内的文件夹靠进去,如下图:
代码实现
在工程的“ AndroidManifest.xml ”文件添加key和Service
//配置应用的AppKey,唯一的,需申请 <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="你的 key" /> //service组件,固定配置 <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>
添加权限(6.0权限另说)
//获取设备网络状态,禁用后无法获取网络状态 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> //网络权限,当禁用后,无法进行检索等相关业务 <uses-permission android:name="android.permission.INTERNET" /> //读取设备硬件信息,统计数据 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> //读取系统信息,包含系统版本等信息,用作统计 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> //获取设备的网络状态,鉴权所需网络代理 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> //允许sd卡写权限,需写入地图数据,禁用后无法显示地图 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> //允许sd卡读权限,需读取地图数据,禁用后无法显示地图 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> //获取统计数据 <uses-permission android:name=< e737 span class="hljs-string">"android.permission.WRITE_SETTINGS" /> //鉴权所需该权限获取进程列表 <uses-permission android:name="android.permission.GET_TASKS" /> //使用步行AR导航,配置Camera权限 <uses-permission android:name="android.permission.CAMERA" /> //网络定位 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> //GPS定位 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
activity.xml布局文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.baidu_demo1.MainActivity"> <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/ll" android:clickable="true"></com.baidu.mapapi.map.MapView> <LinearLayout android:id="@+id/ll" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="horizontal"> <Button android:id="@+id/bt" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="复位" /> <Button android:id="@+id/button" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="卫星" /> <Button android:id="@+id/buttons" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="普通" /> </LinearLayout> </RelativeLayout>
Mainactivity.java代码实现
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; 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.MapStatus; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.model.LatLng; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private MapView mMapView; private BaiduMap mBaiduMap; public LocationClient mLocationClient; public BDLocationListener myListener = new MyLocationListener(); private Button bt; private Button button; private Button buttons; private LatLng latLng; private boolean isFirstLoc = true; // 是否首次定位 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); initView(); initMap(); } private void initMap() { //获取地图控件引用 mBaiduMap = mMapView.getMap(); //普通地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); mBaiduMap.setMyLocationEnabled(true); //默认显示普通地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); //开启交通图 //mBaiduMap.setTrafficEnabled(true); //开启热力图 //mBaiduMap.setBaiduHeatMapEnabled(true); // 开启定位图层 mBaiduMap.setMyLocationEnabled(true); mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类 //配置定位SDK参数 initLocation(); mLocationClient.registerLocationListener(myListener); //注册监听函数 //开启定位 mLocationClient.start(); //图片点击事件,回到定位点 mLocationClient.requestLocation(); } //配置定位SDK参数 private void initLocation() { LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系 int span = 1000; option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的 option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要 option.setOpenGps(true);//可选,默认false,设置是否使用gps option.setLocationNotify(true);//可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果 option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation // .getLocationDescribe里得到,结果类似于“在北京天安门附近” option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到 option.setIgnoreKillProcess(false); option.setOpenGps(true); // 打开gps //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死 option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集 option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤GPS仿真结果,默认需要 mLocationClient.setLocOption(option); } //实现BDLocationListener接口,BDLocationListener为结果监听接口,异步获取定位结果 public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { latLng = new LatLng(location.getLatitude(), location.getLongitude()); // 构造定位数据 MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(100).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); // 设置定位数据 mBaiduMap.setMyLocationData(locData); // 当不需要定位图层时关闭定位图层 //mBaiduMap.setMyLocationEnabled(false); if (isFirstLoc) { isFirstLoc = false; 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())); if (location.getLocType() == BDLocation.TypeGpsLocation) { // GPS定位结果 Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show(); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) { // 网络定位结果 Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show(); } else if (location.getLocType() == BDLocation.TypeOffLineLocation) { // 离线定位结果 Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show(); } else if (location.getLocType() == BDLocation.TypeServerError) { Toast.makeText(MainActivity.this, "服务器错误,请检查", Toast.LENGTH_SHORT).show(); } else if (location.getLocType() == BDLocation.TypeNetWorkException) { Toast.makeText(MainActivity.this, "网络错误,请检查", Toast.LENGTH_SHORT).show(); } else if (location.getLocType() == BDLocation.TypeCriteriaException) { Toast.makeText(MainActivity.this, "手机模式错误,请检查是否飞行", Toast.LENGTH_SHORT).show(); } } } } private void initView() { mMapView = (MapView) findViewById(R.id.bmapView); bt = (Button) findViewById(R.id.bt); bt.setOnClickListener(this); button = (Button) findViewById(R.id.button); button.setOnClickListener(this); buttons = (Button) findViewById(R.id.buttons); buttons.setOnClickListener(this); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt: //把定位点再次显现出来 MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latLng); mBaiduMap.animateMapStatus(mapStatusUpdate); break; case R.id.button: //卫星地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); break; case R.id.buttons: //普通地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); break; } } }
就是这么简单,希望留言讨论,谢谢!!!
相关文章推荐
- 基于百度地图 Android SDKv1.3.5实现简单的定位功能,自定义标题栏
- Android简单实现 高德地图的定位与显示,点击按钮切换地图图层
- Android简单实现高德地图显示及定位
- Android简单实现高德地图显示及定位
- 基于百度地图 Android SDKv1.3.5实现简单的定位功能,自定义标题栏
- Android 百度地图开发(一)如何调用百度地图接口和在项目中显示百度地图以及实现定位
- Android简单实现高德地图显示及定位
- Android简单实现 高德地图的定位与显示,点击按钮切换地图图层
- Android百度地图之位置定位和附近查找代码简单实现 (上)
- (转)Android百度地图之位置定位和附近查找代码简单实现 (上)
- Android中实现GPS定位的简单例子
- Arcgis andoid开发之应用百度地图接口实现精准定位与显示
- Android中简单实现从网络下在图片显示并保存在本地
- Android最简单的单例模式,基于百度地图随时获取定位信息
- 基于android系统实现的简单定位功能
- Android集成百度地图接口,实现定位+路径规划。新手教程
- Android百度地图开发—定位显示以及自定义缩放功能(三)
- Arcgis andoid开发之应用百度地图接口实现精准定位与显示
- android百度地图-定位并显示位置信息
- android--百度地图--方向定位+覆盖物显示