1 /*
2 *1.实现定位
3 *2.引入方向传感器
4 *3.自定义位置图标
5 * */
6 public class MainActivity extends Activity {
7 MapView mapView;
8 BaiduMap mBaiduMap;
9 // 定位相关
10 private LocationClient mLocationClient;
11 private MyLocationListener mLocationListener;
12 private boolean isFirst = true;
13 // 记录经纬度
14 private double mLatitude;
15 private double mLongtitude;
16 // 自定义位置图标
17 private BitmapDescriptor mIconLocation;
18 private MyOrientationListener myOrientationListener;
19 private float mCurrentX;
20
21 @Override
22 protected void onCreate(Bundle savedInstanceState) {
23 super.onCreate(savedInstanceState);
24 SDKInitializer.initialize(getApplicationContext());
25 requestWindowFeature(Window.FEATURE_NO_TITLE);
26 setContentView(R.layout.fragment_main);
27 mapView = (MapView) findViewById(R.id.bmapView);
28 mBaiduMap = mapView.getMap();
29 // 设置地图标尺500m
30 MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
31 mBaiduMap.setMapStatus(msu);
32
33 // 初始化定位
34
35 mLocationClient = new LocationClient(this);
36 mLocationListener = new MyLocationListener();
37 mLocationClient.registerLocationListener(mLocationListener);
38 LocationClientOption option = new LocationClientOption();
39 option.setCoorType("bd09ll");// 坐标类型
40 option.setIsNeedAddress(true);
41 option.setOpenGps(true);
42 option.setScanSpan(1000);// 每隔1秒请求
43 mLocationClient.setLocOption(option);
44
45 // 初始化图标
46 mIconLocation = BitmapDescriptorFactory
47 .fromResource(R.drawable.navi_map_gps_locked);
48 myOrientationListener = new MyOrientationListener(this);
49 myOrientationListener
50 .setOnOrientationListener(new OnOrientationListener() {
51
52 @Override
53 public void onOrientationChanged(float X) {
54 // TODO Auto-generated method stub
55 mCurrentX = X;
56 }
57 });
58
59 }
60
61 public void but(View view) {
62 switch (view.getId()) {
63
64 // 定位到我的位置
65 case R.id.back:
66 LatLng latLng = new LatLng(mLatitude, mLongtitude);
67 MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
68 mBaiduMap.animateMapStatus(msu);
69
70 break;
71
72 }
73
74 }
75
76 @Override
77 protected void onResume() {
78
79 super.onResume();
80 mapView.onResume();
81 }
82
83 @Override
84 protected void onStart() {
85
86 super.onStart();
87 // 开启定位
88 mBaiduMap.setMyLocationEnabled(true);
89 if (!mLocationClient.isStarted()) {
90 mLocationClient.start();
91 }
92 // 开启方向传感器
93 myOrientationListener.start();
94
95 }
96
97 @Override
98 protected void onStop() {
99 // TODO Auto-generated method stub
100 super.onStop();
101 // 停止定位
102 mBaiduMap.setMyLocationEnabled(false);
103 mLocationClient.stop();
104 // 停止方向传感器
105 myOrientationListener.stop();
106
107 }
108
109 @Override
110 protected void onPause() {
111 // TODO Auto-generated method stub
112 super.onPause();
113 mapView.onPause();
114 }
115
116 @Override
117 protected void onDestroy() {
118 // TODO Auto-generated method stub
119 super.onDestroy();
120 mapView.onDestroy();
121 }
122
123 private class MyLocationListener implements BDLocationListener {
124
125 @Override
126 public void onReceiveLocation(BDLocation arg0) {
127 // 精度、纬度
128 MyLocationData data = new MyLocationData.Builder()
129 .direction(mCurrentX).accuracy(arg0.getRadius())
130 .latitude(arg0.getLatitude())
131 .longitude(arg0.getLongitude()).build();
132 mBaiduMap.setMyLocationData(data);
133
134 // 设置自定义图标
135 MyLocationConfiguration config = new MyLocationConfiguration(
136 com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.NORMAL,
137 true, mIconLocation);
138 mBaiduMap.setMyLocationConfigeration(config);
139
140 // 更新经纬度
141 mLatitude = arg0.getLatitude();
142 mLongtitude = arg0.getLongitude();
143 // 第一次进入,设置用户当前位置
144 if (isFirst) {
145 LatLng latLng = new LatLng(arg0.getLatitude(),
146 arg0.getLongitude());
147 MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
148 mBaiduMap.animateMapStatus(msu);
149 isFirst = false;
150 // 显示地址
151 Toast.makeText(MainActivity.this, arg0.getAddrStr(), 0).show();
152
153 }
154
155 }
156
157 @Override
158 public void onConnectHotSpotMessage(String arg0, int arg1) {
159 // TODO Auto-generated method stub
160
161 }
162
163 }
164
165 }
1 public class MyOrientationListener implements SensorEventListener {
2 private SensorManager mSensorManager;
3 private Context mContext;
4 private Sensor mSensor;
5
6 private float lastX;
7
8 public MyOrientationListener(Context Context) {
9 this.mContext = Context;
10 }
11 //开始监听
12 public void start() {
13 mSensorManager = (SensorManager) mContext
14 .getSystemService(Context.SENSOR_SERVICE);
15 if (mSensorManager != null) {
16 // 获得方向传感器
17 mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
18
19 }
20 if (mSensor != null) {
21 mSensorManager.registerListener(this, mSensor,
22 SensorManager.SENSOR_DELAY_UI);
23 }
24 else {
25 Toast.makeText(mContext, "没有方向传感器", 1).show();
26 }
27
28 }
29
30 public void stop() {
31 mSensorManager.unregisterListener(this);
32
33 }
34
35 @Override
36 public void onSensorChanged(SensorEvent event) {
37
38 if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
39 float x = event.values[SensorManager.DATA_X];
40 if (Math.abs(x - lastX) > 1.0) {
41 if (mOnOrientationListener != null) {
42 mOnOrientationListener.onOrientationChanged(x);
43 }
44 }
45 lastX = x;
46 }
47 }
48
49 @Override
50 public void onAccuracyChanged(Sensor sensor, int accuracy) {
51
52 }
53
54 private OnOrientationListener mOnOrientationListener;
55
56 public void setOnOrientationListener(
57 OnOrientationListener mOnOrientationListener) {
58 this.mOnOrientationListener = mOnOrientationListener;
59 }
60
61 public interface OnOrientationListener {
62 void onOrientationChanged(float X);
63 }
64 }