百度地图的使用(2)

来源:互联网 发布:html转xml python 编辑:程序博客网 时间:2024/06/05 10:17
百度地图的使用(1)地址:http://blog.csdn.net/daidaishuiping/article/details/69844681
百度地图的使用(2)地址:http://blog.csdn.net/daidaishuiping/article/details/69845041
百度地图的使用(3)地址:http://blog.csdn.net/daidaishuiping/article/details/69845265
百度地图的使用(4)地址:http://blog.csdn.net/daidaishuiping/article/details/69938861
源码地址:http://download.csdn.net/detail/daidaishuiping/9808471
百度地图定位及方向传感器使用步骤:(注意在targetSdkVersion大于23的时候需要动态添加权限)
1、在百度地图使用(1)基础上,配置AndroidManifest.xml添加服务
AndroidManifest.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="demo.com.baidumapdemo">

<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.WAKE_LOCK" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="jmaiYmnQb2uRq3j2WiwoIsIvVFOTEY2r" />

<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>
2、设置自定义图标和创建方向传感器
MainActivity代码:
public class MainActivity extends AppCompatActivity {

private MapView mapView;
private BaiduMap baiduMap;
private Context context;
// 定位相关
private LocationClient locationClient;
private MyBDLocationListener listener;
private boolean isFirstIn = true;// 第一次定位
private BitmapDescriptor mIconLocation;// 自定义图片
private MyOrientationListener myOrientationListener;// 传感器监听
private float mCurrentX;// 记录当期位置

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.context = this;
initView();
// 初始化定位
initLocation();
}

/**
* 初始化地图
*/
private void initView() {
mapView = (MapView) findViewById(R.id.mapView);
baiduMap = mapView.getMap();
// 缩放比例
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
baiduMap.setMapStatus(msu);
}

/**
* 设置定位相关的信息
*/
private void initLocation() {

locationClient = new LocationClient(this);
listener = new MyBDLocationListener();
locationClient.registerLocationListener(listener);

LocationClientOption option = new LocationClientOption();
option.setCoorType("bd09ll");// 设置坐标类型
option.setIsNeedAddress(true);// 返回当前位置
option.setOpenGps(true);// 打开GPS
option.setScanSpan(1000); // 设置每隔多少秒进行一次请求
locationClient.setLocOption(option);
// 初始化图标
mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.icon_gps_location);
// 初始化传感器
myOrientationListener = new MyOrientationListener(context);
// 接口回调
myOrientationListener.setOnOrientationListener(new MyOrientationListener.OnOrientationListener() {
@Override
public void onOrientationChanged(float x) {
mCurrentX = x;
}
});
}

@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mapView.onResume();
}

@Override
protected void onStart() {
super.onStart();
// 启动时,默认开启定位
baiduMap.setMyLocationEnabled(true);
if (!locationClient.isStarted()) {
locationClient.start();
// 开启方向传感器
myOrientationListener.start();
}
}

@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mapView.onPause();
}

@Override
protected void onStop() {
super.onStop();
// 关闭定位
baiduMap.setMyLocationEnabled(false);
locationClient.stop();
// 停止方向传感器
myOrientationListener.stop();
}

@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mapView.onDestroy();
}

/**
* 实现BDLocationListener接口
*/
private class MyBDLocationListener implements BDLocationListener {

@Override
public void onReceiveLocation(BDLocation location) {

MyLocationData data = new MyLocationData.Builder()
.direction(mCurrentX)//设置方向
.accuracy(location.getRadius())//获取定位精准度
.longitude(location.getLongitude())//获取经度信息
.latitude(location.getLatitude())//获取纬度信息
.build();
baiduMap.setMyLocationData(data);

// 设置自定义图标
MyLocationConfiguration configuration = new MyLocationConfiguration(
MyLocationConfiguration.LocationMode.NORMAL, true, mIconLocation);
baiduMap.setMyLocationConfiguration(configuration);

if (isFirstIn) {
isFirstIn = false;
// 设置精度location.getLatitude()和纬度location.getLongitude()
LatLng latLng = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
baiduMap.animateMapStatus(msu);// 地图的位置使用动画的效果传过去
//location.getAddrStr()//获取地址信息
Toast.makeText(context, location.getAddrStr(), Toast.LENGTH_SHORT).show();
}
}

@Override
public void onConnectHotSpotMessage(String s, int i) {
Log.e("info", "s=" + s + ",i=" + i);
}

}

}
方向传感器MyOrientationListener代码:
public class MyOrientationListener implements SensorEventListener {

private SensorManager mSensorManager;// 传感器管理者
private Context mContext;// 上下文
private Sensor mSensor;// 传感器
private float lastX;// x坐标变化

/**
* 构造方法
*/
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) {

}

/**
* 当传感器方向发生变化时
*/
@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) {
if (mOnOrientationListener != null) {
mOnOrientationListener.onOrientationChanged(x);//回调
}
}

lastX = x;

}
}

// 成员变量
private OnOrientationListener mOnOrientationListener;

// set方法
public void setOnOrientationListener(
OnOrientationListener mOnOrientationListener) {
this.mOnOrientationListener = mOnOrientationListener;
}

/**
* 接口回调
*/
public interface OnOrientationListener {
void onOrientationChanged(float x);
}

}
图标:


0 0