Android之百度地图(二)基础地图和定位

Android之百度地图(二)基础地图和定位

        上一篇文章和大家分享了如何查看SHA1和申请百度地图的秘钥,现在继续和大家分享如何实现百度地图的基本地图的实现和定位。要在应用中使用百度地图,必须下载百度提供的相应的sdk和so文件,并导入到项目中,使用AS导入百度地图的依赖还是比较简单的。导入使用依赖有两种方法。 

环境配置
    方法  一、将下载好的文件解压后,直接解压后的文件的内容拷贝到项目的libs文件夹下,并且在build.gradle文件中添加一段代码
sourceSets{
    main{
        jniLibs.srcDirs = ['libs']
    }
}
  方法二、解压下载后的文件,将文件中的jar文件拷贝到项目的libs文件夹下,在项目下创建jnilibs文件夹,并将解压后的文件夹中的armeabi文件夹拷贝到jnilibs文件夹下即刻。
       在mainfast文件中在标签application中添加
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="申请的秘钥" />
 这里申请的秘钥就是第一篇分享的申请后的AK。

定位需要的服务:
<service
    android:name="com.baidu.location.f"
    android:enabled="true"
    android:process=":remote" >
</service>


     完成以上的一种配置后sync 一下项目,如果这些环境没有配置好,百度地图是无法实现的。

代码实现
    一基本地图实现:
     接下来看看如何实现基本地图:
     首先在布局文件中使用MapView:
<com.baidu.mapapi.map.MapView
    android:id="@+id/mv_bd_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</com.baidu.mapapi.map.MapView>

注意在activity文件中一定要在oncreate方法中,在sencontentView(),之前注册地图组件
SDKInitializer.initialize(getApplicationContext());
 根据activity的生命周期,调用mapview的声明周期方法,从而实现跟对活动而展现和销毁mapview,给用户一个很好的体验。使用BaiduMap这个类对地图做一些配置,例如修改地图的比例等。

    二 定位
    要实现定位功能需要使用到BaiduMap、LocationClient、BDLocationListener这几个类;
    首先初始化LocationClient,注册定位监听,和一些定位后的结果信息配置
client = new LocationClient(this);
mLocationListener  = new MyLocationListener();
client.registerLocationListener(mLocationListener);
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
option.setCoorType("bd09ll");
option.setIsNeedAddress(true);
option.setOpenGps(true);
option.setScanSpan(1000);
client.setLocOption(option);
   然后在生命周期的onStart和onStop方法中开启和停止定位
@Override
protected void onStart() {
    super.onStart();
    baiduMap.setMyLocationEnabled(true);
    if (!client.isStarted()) {
        client.start();
    }
baiduMap.setMyLocationEnabled(false);
client.stop();
     再来实现BDLocationListener,想创建MyLocationData ,再baidumap设置data,获取定位到的位置的经纬度,通过动画的形式将位置改变到定位的显示
private class MyLocationListener implements BDLocationListener{

    @Override
    public void onReceiveLocation(BDLocation bdLocation) {
        MyLocationData data = new MyLocationData.Builder()
                .direction(mCurrentX)
                .accuracy(bdLocation.getRadius())
                .latitude(bdLocation.getLatitude())
                .longitude(bdLocation.getLongitude())
                .build();
        city = bdLocation.getCity();
        baiduMap.setMyLocationData(data);
        latitude = bdLocation.getLatitude();
        longitude = bdLocation.getLongitude();
        MyLocationConfiguration config = new
                MyLocationConfiguration(mMapLocationMode,true,bitmapDes);
        baiduMap.setMyLocationConfiguration(config);
        if (isFirst){
            LatLng latlng = new LatLng(latitude,longitude);
            MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latlng);
            baiduMap.animateMapStatus(msu);
            isFirst = false;
        }
三 权限配置

      既然定位肯定需要使用网络等一些权限,在Android版本6.0及以上的版本是需要动态获取一些权限的
<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.GET_TASKS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
 Android6.0以上没有动态获取权限的话是不能实现定位功能的,这里给出动态获取权限的代码
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
        ||ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
        ||ActivityCompat.checkSelfPermission(this,Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED){
    ActivityCompat.requestPermissions(this ,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.READ_PHONE_STATE
    },requestCode);
}else {

    initLocationClient();
}
基本地图和定位就实现了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值