百度地图定位
来源:互联网 发布:gif动画软件下载 编辑:程序博客网 时间:2024/06/06 08:33
注意:我是用的定位+基础地图下载的BaiduLBS_Android.jar
下载地址:http://api.map.baidu.com/portal/sdk/api_filedownload?file_path=/Android/2-4-2/BaiduLBS_Android_V2.4.2_33556480.zip
配置环境:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/buildprojec
清单文件相应配置
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.maptest"> <!--定位的相关权限--> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.WRITE_SETTINGS"/> <!-- 这个权限用于进行网络定位--> <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> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <!--百度key--> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="您的地图key"/> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!--注册定位服务--> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service> </application></manifest>
MainActivity方法(只是一个MapView就不放xml了)
package com.maptest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;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.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;import com.baidu.mapapi.map.MapStatusUpdate;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;public class MainActivity extends AppCompatActivity { private MapView mapView; //初始化定位类 private LocationClient mLocationClient = null; private BDLocationListener myListener = null; private LocationMode mLocationMode; private BaiduMap mBaidumap; //是否第一次定位 private boolean isFirstIn = true; //定位自己图标 private BitmapDescriptor mIconLocation; //位置方向偏移量 private float mCurrentX; //位置传感器 private MyOrientationListener myOrientationListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); mapView = (MapView) findViewById(R.id.bmapView); mBaidumap = mapView.getMap(); initLocation(); } private void initLocation() { mLocationMode = LocationMode.NORMAL; mLocationClient = new LocationClient(getApplicationContext()); myListener = new MyLocationListener(); mLocationClient.registerLocationListener(myListener); LocationClientOption option = new LocationClientOption(); option.setCoorType("bd09ll"); //坐标类型 option.setIsNeedAddress(true); //返回当前位置 option.setOpenGps(true); option.setScanSpan(5000); //多少秒一次请求 mLocationClient.setLocOption(option); //加载option //初始化自己位置的图标 mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.navi_map_gps_locked); //初始化方向传感器 myOrientationListener = new MyOrientationListener(this); myOrientationListener.setOnOrientationListener(new MyOrientationListener.OnOrientationListener() { @Override public void onOrientationChanged(float x) { //更新当前位置方向 mCurrentX = x; } }); } @Override protected void onStart() { super.onStart(); mBaidumap.setMyLocationEnabled(true); //开启定位的允许 if (!mLocationClient.isStarted()) //判断是否启动 { //开启定位 mLocationClient.start(); } // 开启方向传感器 myOrientationListener.start(); } public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location.getLocType() == BDLocation.TypeOffLineLocationFail || location.getLocType() == BDLocation.TypeOffLineLocationNetworkFail || location.getLocType() == BDLocation.TypeCriteriaException || location.getLocType() == BDLocation.TypeNetWorkException || location.getLocType() == BDLocation.TypeServerError) { Toast.makeText(MainActivity.this, "获取定位失败", Toast.LENGTH_SHORT).show(); } else { // 构造定位数据 MyLocationData locData = new MyLocationData.Builder() .direction(mCurrentX)// 方向 .accuracy(location.getRadius())//精度 .latitude(location.getLatitude())// .longitude(location.getLongitude())// .build(); //build模式 // 设置定位数据 mBaidumap.setMyLocationData(locData); // 设置定位图层的配置(定位模式,是否允许方向信息,用户自定义定位图标) MyLocationConfiguration config = new MyLocationConfiguration(mLocationMode, true, mIconLocation); mBaidumap.setMyLocationConfigeration(config); //第一次定位时更新地图中心点 if (isFirstIn) { //定位到自己所在的位置 LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng); mBaidumap.setMapStatus(msu); isFirstIn = false; } } } @Override public void onConnectHotSpotMessage(String s, int i) { } } @Override protected void onResume() { mapView.onResume(); super.onResume(); } @Override protected void onDestroy() { mLocationClient.stop(); mapView.onDestroy(); super.onDestroy(); } @Override protected void onPause() { mapView.onPause(); super.onPause(); }}
方向传感器
package com.maptest;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;public class MyOrientationListener implements SensorEventListener { private SensorManager mSensorManager; private Context mContext; private Sensor mSensor; private float lastX; public MyOrientationListener(Context context) { this.mContext = context; } @SuppressWarnings("deprecation") public void start() //开始监听 { mSensorManager = (SensorManager) mContext .getSystemService(Context.SENSOR_SERVICE); if (mSensorManager != null) { // 获得方向传感器 mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); } //注册方向传感器广播 if (mSensor != null) { mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_UI); } } public void stop() //结束监听 { mSensorManager.unregisterListener(this); } @Override public void onAccuracyChanged(Sensor arg0, int arg1) { // TODO Auto-generated method stub } @SuppressWarnings( {"deprecation"}) //方向发生改变 @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) { float x = event.values[SensorManager.DATA_X]; if (Math.abs(x - lastX) > 1.0) //角度大于1度 { if (mOnOrientationListener != null) { mOnOrientationListener.onOrientationChanged(x); } } lastX = x; } } private OnOrientationListener mOnOrientationListener; public void setOnOrientationListener( OnOrientationListener mOnOrientationListener) { this.mOnOrientationListener = mOnOrientationListener; } //跑出接口 public interface OnOrientationListener { void onOrientationChanged(float x); }}
package com.maptest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;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.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;import com.baidu.mapapi.map.MapStatusUpdate;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;public class MainActivity extends AppCompatActivity { private MapView mapView; //初始化定位类 private LocationClient mLocationClient = null; private BDLocationListener myListener = null; private LocationMode mLocationMode; private BaiduMap mBaidumap; //是否第一次定位 private boolean isFirstIn = true; //定位自己图标 private BitmapDescriptor mIconLocation; //位置方向偏移量 private float mCurrentX; //位置传感器 private MyOrientationListener myOrientationListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); mapView = (MapView) findViewById(R.id.bmapView); mBaidumap = mapView.getMap(); initLocation(); } private void initLocation() { mLocationMode = LocationMode.NORMAL; mLocationClient = new LocationClient(getApplicationContext()); myListener = new MyLocationListener(); mLocationClient.registerLocationListener(myListener); LocationClientOption option = new LocationClientOption(); option.setCoorType("bd09ll"); //坐标类型 option.setIsNeedAddress(true); //返回当前位置 option.setOpenGps(true); option.setScanSpan(5000); //多少秒一次请求 mLocationClient.setLocOption(option); //加载option //初始化自己位置的图标 mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.navi_map_gps_locked); //初始化方向传感器 myOrientationListener = new MyOrientationListener(this); myOrientationListener.setOnOrientationListener(new MyOrientationListener.OnOrientationListener() { @Override public void onOrientationChanged(float x) { //更新当前位置方向 mCurrentX = x; } }); } @Override protected void onStart() { super.onStart(); mBaidumap.setMyLocationEnabled(true); //开启定位的允许 if (!mLocationClient.isStarted()) //判断是否启动 { //开启定位 mLocationClient.start(); } // 开启方向传感器 myOrientationListener.start(); } public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location.getLocType() == BDLocation.TypeOffLineLocationFail || location.getLocType() == BDLocation.TypeOffLineLocationNetworkFail || location.getLocType() == BDLocation.TypeCriteriaException || location.getLocType() == BDLocation.TypeNetWorkException || location.getLocType() == BDLocation.TypeServerError) { Toast.makeText(MainActivity.this, "获取定位失败", Toast.LENGTH_SHORT).show(); } else { // 构造定位数据 MyLocationData locData = new MyLocationData.Builder() .direction(mCurrentX)// 方向 .accuracy(location.getRadius())//精度 .latitude(location.getLatitude())// .longitude(location.getLongitude())// .build(); //build模式 // 设置定位数据 mBaidumap.setMyLocationData(locData); // 设置定位图层的配置(定位模式,是否允许方向信息,用户自定义定位图标) MyLocationConfiguration config = new MyLocationConfiguration(mLocationMode, true, mIconLocation); mBaidumap.setMyLocationConfigeration(config); //第一次定位时更新地图中心点 if (isFirstIn) { //定位到自己所在的位置 LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng); mBaidumap.setMapStatus(msu); isFirstIn = false; } } } @Override public void onConnectHotSpotMessage(String s, int i) { } } @Override protected void onResume() { mapView.onResume(); super.onResume(); } @Override protected void onDestroy() { mLocationClient.stop(); mapView.onDestroy(); super.onDestroy(); } @Override protected void onPause() { mapView.onPause(); super.onPause(); }}
方向传感器
package com.maptest;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;public class MyOrientationListener implements SensorEventListener { private SensorManager mSensorManager; private Context mContext; private Sensor mSensor; private float lastX; public MyOrientationListener(Context context) { this.mContext = context; } @SuppressWarnings("deprecation") public void start() //开始监听 { mSensorManager = (SensorManager) mContext .getSystemService(Context.SENSOR_SERVICE); if (mSensorManager != null) { // 获得方向传感器 mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); } //注册方向传感器广播 if (mSensor != null) { mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_UI); } } public void stop() //结束监听 { mSensorManager.unregisterListener(this); } @Override public void onAccuracyChanged(Sensor arg0, int arg1) { // TODO Auto-generated method stub } @SuppressWarnings( {"deprecation"}) //方向发生改变 @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) { float x = event.values[SensorManager.DATA_X]; if (Math.abs(x - lastX) > 1.0) //角度大于1度 { if (mOnOrientationListener != null) { mOnOrientationListener.onOrientationChanged(x); } } lastX = x; } } private OnOrientationListener mOnOrientationListener; public void setOnOrientationListener( OnOrientationListener mOnOrientationListener) { this.mOnOrientationListener = mOnOrientationListener; } //跑出接口 public interface OnOrientationListener { void onOrientationChanged(float x); }}
0 0
- 百度地图 定位 地图
- 百度地图,百度定位。
- 百度地图之定位
- Android 百度地图 定位
- Android百度地图定位
- 百度地图定位基础
- 百度地图多点定位
- 百度地图定位问题
- Android 百度地图定位
- 百度地图 定位问题
- 百度地图定位操作
- iOS百度地图定位
- Android百度地图定位
- 百度地图定位
- 百度地图定位经纬度
- 百度地图定位
- HTML5定位+百度地图
- 百度地图定位原理
- Opencv2系列学习笔记2(图像的遍历)
- Oracle建表、函数、存储过程实现
- PAT 1032
- javascript:window属性方法详细应用及方法实例
- Spring Cloud系列一 之 eureka服务注册中心
- 百度地图定位
- JS 获取日期相差天数
- 哈希之线性探测法
- 【Coursera】编程题 Percolation
- Jquery——Day2(基础事件)
- 编码与解码-UVA
- servlet纲要
- java基础学习--------第三章流程控制
- 回溯算法的使用