网友通过本文主要向大家介绍了android studio百度云,android studio百度,android studio 地图,android studio,android studio官网等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
Android studio 百度地图开发(2)地图定位
Android studio 百度地图开发(2)地图定位
email:chentravelling@163.com
开发环境:win7 64位,Android Studio,请注意是Android Studio。
地图显示、工程配置请参考:Android studio 百度地图开发(1)配置工程、显示地图
一.我为百度做点事
最开始自己是从头到尾地写了一遍,但是始终不能成功定位,一直没找到原因,后来也是参考了百度官网上的Demo才弄出来,所以其中的代码,基本来自百度Demo。喜欢吐槽的朋友请键盘留情,然后悄悄飘过吧。
一直以来都是喜欢百度的,尽管百度的的确确不能和Google比。但是,在中国的科技氛围里,我觉得百度已经够好了,所以也贴一点百度地图定位SDK的产品优势。
最后,我想问问那些嘴里骂着百度心里又离不开百度的朋友:你为中国的科技、IT、社会做了什么?
二.定位SDK的应用
言归正传,先贴整个工程的代码,第三部分再解释说明。
(1)BaiDuMapActivity.java
package intvehapp.intvehapp; 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.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.model.LatLng; import android.app.Activity; import android.os.Bundle; public class BaiDuMapActivity extends Activity{ /** * 定位SDK核心类 */ private LocationClient locationClient; /** * 定位监听 */ public MyLocationListenner myListener = new MyLocationListenner(); /** * 百度地图控件 */ private MapView mapView; /** * 百度地图对象 */ private BaiduMap baiduMap; boolean isFirstLoc = true; // 是否首次定位 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_bai_du_map); /** * 地图初始化 */ //获取百度地图控件 mapView = (MapView) findViewById(R.id.bmapView); //获取百度地图对象 baiduMap = mapView.getMap(); // 开启定位图层 baiduMap.setMyLocationEnabled(true); /** * 定位初始化 */ //声明定位SDK核心类 locationClient = new LocationClient(this); //注册监听 locationClient.registerLocationListener(myListener); //定位配置信息 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 打开gps option.setCoorType("bd09ll"); // 设置坐标类型 option.setScanSpan(1000);//定位请求时间间隔 locationClient.setLocOption(option); //开启定位 locationClient.start(); } /** * 定位SDK监听函数 */ public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { // map view 销毁后不在处理新接收的位置 if (location == null || mapView == null) { return; } MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(100).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); baiduMap.setMyLocationData(locData); if (isFirstLoc) { isFirstLoc = false; LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); MapStatus.Builder builder = new MapStatus.Builder(); builder.target(ll).zoom(18.0f); baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); } } public void onReceivePoi(BDLocation poiLocation) { } } @Override protected void onPause() { mapView.onPause(); super.onPause(); } @Override protected void onResume() { mapView.onResume(); super.onResume(); } @Override protected void onDestroy() { // 退出时销毁定位 locationClient.stop(); // 关闭定位图层 baiduMap.setMyLocationEnabled(false); mapView.onDestroy(); mapView = null; super.onDestroy(); } }
(2)activity_bai_du_map.xml:增加百度地图控件
(3)AndroidManifest.xml:增加百度地图SDK需要的权限、API_KEY和定位服务
<!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%2D%2D%3E--> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="intvehapp.intvehapp"> <!--{cke_protected}{C}%3C!%2D%2D%20%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BEAPI%E6%89%80%E9%9C%80%E6%9D%83%E9%99%90%20%2D%2D%3E--> <uses-permission android:name="android.permission.GET_ACCOUNTS"> <uses-permission android:name="android.permission.USE_CREDENTIALS"> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"> <uses-permission android:name="android.permission.INTERNET"> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"> <uses-permission android:name="android.permission.READ_PHONE_STATE"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> <uses-permission android:name="android.permission.BROADCAST_STICKY"> <uses-permission android:name="android.permission.WRITE_SETTINGS"> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"> <!--{cke_protected}{C}%3C!%2D%2D%20%E8%AE%BF%E9%97%AE%E7%B2%BE%E7%A1%AE%E4%BD%8D%E7%BD%AE%E7%9A%84%E6%9D%83%E9%99%90%20%2D%2D%3E--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"> <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsrtl="true" android:theme="@style/AppTheme"> <activity android:name=".BaiDuMapActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"> <category android:name=&