案例二———百度地图上定位自己的位置

来源:互联网 发布:网络大电影市场规模 编辑:程序博客网 时间:2024/05/16 23:49

百度地图定位自己的位置

一.预期效果:




二.主要问题:

1.正确申请API




三.核心代码:

1.activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_height="match_parent"      android:layout_width="match_parent"      >            <com.baidu.mapapi.map.MapView          android:id="@+id/map_view"          android:layout_height="match_parent"          android:layout_width="match_parent"          android:clickable="true"          />           </LinearLayout

2.AndroidManifest.xml


<manifest       ....     <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.perimission.READ_ETTINGS"/>            <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_EXTERNAL_STORAGE"/>      <uses-permission android:name="android.permission.BROADCAST_STICKY"/>      <uses-permission android:name="android.permission.WRITE_SETTINGS"/>      <uses-permission android:name="android.permission.READ_PHONE_STATE"/>      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>         ...        <application          ...          <meta-data               android:name="com.baidu.lbsapi.API_KEY"              android:value="AO0YBAVzeUxq2lDQYi72cFPT"/>         ...      </application>    </manifest>  

3.MainActivity.Java


package cn.bzu.tong.bmap;    import java.util.List;    import android.app.Activity;  import android.content.Context;  import android.location.Location;  import android.location.LocationListener;  import android.location.LocationManager;  import android.os.Bundle;  import android.view.Menu;  import android.widget.Toast;    import com.baidu.mapapi.SDKInitializer;  import com.baidu.mapapi.map.BaiduMap;  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 Activity  {      private MapView mapView;      private BaiduMap baiduMap;      private LocationManager locationManager;      private String provider;      private boolean isFirstLocate = true;                    @Override      protected void onCreate(Bundle savedInstanceState)      {          super.onCreate(savedInstanceState);          SDKInitializer.initialize(getApplicationContext());          setContentView(R.layout.activity_main);          mapView = (MapView) findViewById(R.id.map_view);                    baiduMap = mapView.getMap();          baiduMap.setMyLocationEnabled(true);          locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);          //获取所有可用的位置提供器          List<String> providerList = locationManager.getProviders(true);                    if(providerList.contains(locationManager.GPS_PROVIDER)){              provider = locationManager.GPS_PROVIDER;                        }else if(providerList.contains(locationManager.NETWORK_PROVIDER)){              provider = locationManager.NETWORK_PROVIDER;          }          else {              //当没有可用位置服务器时,弹出Toast提示用户              Toast.makeText(this, "No location provider to use", Toast.LENGTH_LONG).show();              return ;          }                    Location location = locationManager.getLastKnownLocation(provider);          if(location != null){              navigateTo(location);          }                    locationManager.requestLocationUpdates(provider, 5000, 1, locationListener);                                    }            private void navigateTo(Location location) {          // TODO Auto-generated method stub          if(isFirstLocate){              LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());              MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);              baiduMap.animateMapStatus(update);              update = MapStatusUpdateFactory.zoomTo(16f);              baiduMap.animateMapStatus(update);              isFirstLocate = false;          }          MyLocationData.Builder locationBuilder = new MyLocationData.Builder();          locationBuilder.latitude(location.getLatitude());          locationBuilder.longitude(location.getLongitude());          MyLocationData locationData = locationBuilder.build();          baiduMap.setMyLocationData(locationData);      }              LocationListener locationListener = new LocationListener() {                    @Override          public void onStatusChanged(String provider, int status, Bundle extras) {              // TODO Auto-generated method stub                        }                    @Override          public void onProviderEnabled(String provider) {              // TODO Auto-generated method stub                        }                    @Override          public void onProviderDisabled(String provider) {              // TODO Auto-generated method stub                        }                    @Override          public void onLocationChanged(Location location) {              // TODO Auto-generated method stub              //更新当前设备的位置信息              if(location != null){                  navigateTo(location);              }          }      };      protected void onDestroy()      {          super.onDestroy();          baiduMap.setMyLocationEnabled(false);          mapView.onDestroy();          if(locationManager != null){              //关闭程序时将监听移除              locationManager.removeUpdates(locationListener);          }      }            protected void onPause()      {          super.onPause();          mapView.onPause();                }            protected void onResume()      {          super.onResume();          mapView.onResume();      }        @Override      public boolean onCreateOptionsMenu(Menu menu)      {          // Inflate the menu; this adds items to the action bar if it is present.          getMenuInflater().inflate(R.menu.main, menu);          return true;      }    }  




0 0