概述

 在genymotion 不能用启用百度地图,genymation 不支持tomcat
 *
 * 1自己根据你创建工程的sha1值   去百度里面获得密钥
 * key ijP9BfWdgApauFMBRurghNs1zp8mXWAt
 * 2 key在清单文件配置
 *
 * 在定位的时候 在用新的Android SDK 必须在android4.4。2 不能进行展示
 * 3 定位需要服务你要 mLocationClient.start(); 进行开启
 * 4 在    initLocation() 你开启
 *
 *      // 开启定位图层  
        baiduMap.setMyLocationEnabled(true);
 * 5  onReceiveLocation 把地图拷贝过来
 *         // 构造定位数据  
            MyLocationData locData = new MyLocationData.Builder()  
                .accuracy(location.getRadius())  
                // 此处设置开发者获取到的方向信息,顺时针0-360  
                .direction(100).latitude(location.getLatitude())  
                .longitude(location.getLongitude()).build();
            // 设置定位数据  
            
            baiduMap.setMyLocationData(locData);  
            
            // 设置定位图层的配置(定位模式,是否允许方向信息,用户自定义定位图标)  
            BitmapDescriptor       mCurrentMarker  = BitmapDescriptorFactory  
                .fromResource(R.drawable.icon_geo);  
       
            MyLocationConfiguration config = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.FOLLOWING, true, mCurrentMarker);  

            baiduMap.setMyLocationConfigeration(config);

—————————————————————————————————————

public class MapActivity extends Activity {

    MapView mMapView = null;

    private BaiduMap baiduMap;

    private double latitude = 40.050966;// 纬度

    private double longitude = 116.303128;// 经度

    private LatLng hmPos = new LatLng(latitude, longitude);

    public LocationClient mLocationClient = null;

    public BDLocationListener myListener = new MyLocationListener();

    

    

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // 在使用SDK各组件之前初始化context信息,传入ApplicationContext

        // 注意该方法要再setContentView方法之前实现

        SDKInitializer.initialize(getApplicationContext());

        setContentView(R.layout.activity_map);

        // 获取地图控件引用

        mMapView = (MapView) findViewById(R.id.bmapView);

        baiduMap = mMapView.getMap();

//        初始化配置 显示地图

        initData();

           mylocal();

//        5秒定位一次

 

        

        

    }

    private void mylocal() {

        

        Toast.makeText(getApplicationContext(), "正在定位", 0).show();

        mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类

        mLocationClient.registerLocationListener(myListener); // 注册监听函数

        initLocation();

    

    }

    private void initData() {

        

        // 描述地图状态将要发生的变化 使用工厂类MapStatusUpdateFactory创建

        MapStatusUpdate mapstatusUpdate = MapStatusUpdateFactory.zoomTo(19);// 默认的级别12

        // 设置缩放级别

        baiduMap.setMapStatus(mapstatusUpdate);

        // LatLng latlng = new LatLng(arg0, arg1);// 坐标 经纬度 参数1 纬度 参数2 经度

        MapStatusUpdate mapstatusUpdatePoint = MapStatusUpdateFactory

                .newLatLng(hmPos);

        // 设置中心点 默认是天安门

        baiduMap.setMapStatus(mapstatusUpdatePoint);

        mMapView.showZoomControls(false);// 默认是true 显示缩放按钮

        mMapView.showScaleControl(false);// 默认是true 显示标尺

        

    }

    private void initLocation() {

        LocationClientOption option = new LocationClientOption();

        option.setLocationMode(LocationMode.Hight_Accuracy);// 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备

        option.setCoorType("bd09ll");// 可选,默认gcj02,设置返回的定位结果坐标系

//        5秒定位一次

        int span = 5000;

        option.setScanSpan(span);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的

        option.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要

        option.setOpenGps(true);// 可选,默认false,设置是否使用gps

        option.setLocationNotify(true);// 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果

        option.setIsNeedLocationDescribe(true);// 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”

        option.setIsNeedLocationPoiList(true);// 可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到

        option.setIgnoreKillProcess(false);// 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死

        option.SetIgnoreCacheException(false);// 可选,默认false,设置是否收集CRASH信息,默认收集

        option.setEnableSimulateGps(false);// 可选,默认false,设置是否需要过滤gps仿真结果,默认需要

        mLocationClient.setLocOption(option);

        

         // 开启定位图层  

        baiduMap.setMyLocationEnabled(true);

        

        

    }

    

    public class MyLocationListener implements BDLocationListener {

        

        @Override

        public void onReceiveLocation(BDLocation location) {

            // 构造定位数据  

            MyLocationData locData = new MyLocationData.Builder()  

                .accuracy(location.getRadius())  

                // 此处设置开发者获取到的方向信息,顺时针0-360  

                .direction(100).latitude(location.getLatitude())  

                .longitude(location.getLongitude()).build();

            // 设置定位数据  

            

            baiduMap.setMyLocationData(locData);  

            

            // 设置定位图层的配置(定位模式,是否允许方向信息,用户自定义定位图标)  

            BitmapDescriptor       mCurrentMarker  = BitmapDescriptorFactory  

                .fromResource(R.drawable.icon_geo);  

       

            MyLocationConfiguration config = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.FOLLOWING, true, mCurrentMarker);  

            baiduMap.setMyLocationConfigeration(config);

        

        

        }

    }

    @Override

    protected void onDestroy() {

        super.onDestroy();

//        mLocationClient.stop();

        // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理

        mMapView.onDestroy();

    }

    @Override

    protected void onResume() {

        super.onResume();

        // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理

        mMapView.onResume();

    }

    @Override

    protected void onPause() {

        super.onPause();

        // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理

        mMapView.onPause();

    }

}

——————————————————————————-

清单文件 在定位的时候一定要添加service

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bawei.test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />
   
<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:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <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>
        <activity
            android:name=".MapActivity"
            android:label="@string/title_activity_map" >
        </activity>
                <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="ExTyPH8T4mFNUiYiL8uTWs8Yi4V7sW7Z" />
        

    </application>

</manifest>