百度地图-----显示地图

显示地图

ONE Goal ,ONE Passion !

显示百度地图

百度地图SDK为开发者提供了便捷的显示百度地图数据的接口,通过以下几步操作,即可在您的应用中使用百度地图数据:
第一步:创建并配置工程(具体方法参见工程配置部分的介绍);
第二步:在AndroidManifest中添加开发密钥、所需权限等信息;
(1)在application中添加开发密钥

<application>  
    <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="开发者 key" />  
</application>

2)添加所需权限

<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" />

第三步,在布局xml文件中添加地图控件;

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="btlh.zzbaidumap.MyLocActivity">



    <com.baidu.mapapi.map.MapView  android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />


</RelativeLayout>

第四步,在应用程序创建时初始化 SDK引用的Context 全局变量:

public class MainActivity extends Activity {  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext 
        //注意该方法要再setContentView方法之前实现 
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
    }  
}


注意:
1,在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中.
2,如果你没有在Application中初始化,而是在一个普通activity中初始化一定要注意
SDKInitializer.initialize(getApplicationContext());中的getApplicationContext()不要写错.写成this一般是可以的.不能写成getBaseContext();那样不能有定位功能.

第五步,创建地图Activity,管理地图生命周期;

public class MyLocActivity extends AppCompatActivity {

    MapView mMapView = null;
    private BaiduMap mBaiduMap = null;
    LocationClient mLocClient;


    boolean isFirstLoc = true;// 是否首次定位
    private BDLocation loc;//记录初次定位的位置
    private GeoCoder geocode;
    MyLocationListenner listenner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //在使用SDK各组件之前初始化context信息,传入ApplicationContext
        //注意该方法要再setContentView方法之前实现
        // 一定要注意getApplicationContext()不要写错
        SDKInitializer.initialize(getApplicationContext());

        setContentView(R.layout.activity_my_loc);


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

        // 开启定位图层
        mBaiduMap.setMyLocationEnabled(true);

        // 定位初始化
        mLocClient = new LocationClient(this);
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true);// 打开gps
        option.setCoorType("bd09ll"); // 设置坐标类型
        mLocClient.setLocOption(option);
        mLocClient.start();
        mLocClient.registerLocationListener(new MyLocationListenner());

    }


    /** * 定位SDK监听函数 */


    public class MyLocationListenner implements BDLocationListener {

        private LatLng ll;

        @Override
        public void onReceiveLocation(BDLocation location) {
            // map view 销毁后不在处理新接收的位置


            if (location == null || mMapView == null)
                return;
            loc = location;
            MyLocationData locData = new MyLocationData.Builder()
                    .accuracy(location.getRadius())
                            // 此处设置开发者获取到的方向信息,顺时针0-360
                    .direction(100).latitude(location.getLatitude())
                    .longitude(location.getLongitude()).build();
            mBaiduMap.setMyLocationData(locData);
            if (isFirstLoc) {
                isFirstLoc = false;
                ll = new LatLng(location.getLatitude(),
                        location.getLongitude());
                MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
                mBaiduMap.animateMapStatus(u);

            }

            //发起反地理编码请求
            ReverseGeoCodeOption options = new ReverseGeoCodeOption().location(ll);


        }

        public void onReceivePoi(BDLocation poiLocation) {
        }
    }
}

注意事项:

如果能实现定位:
1,查看初始化是传入参数是否是getApplicationContext()

SDKInitializer.initialize(getApplicationContext());

2,在清单文件中加入

  <service  android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>

3,不要使用虚拟机测试
这样的话就能实现定位了.

你可能感兴趣的:(地图,百度地图)