Android MVVM框架搭建(八)高德地图定位、天气查询、BottomSheetDialog

这里只是简单的继承了一下BaseFragment,然后就是DataBinding的绑定。

② Navigation绑定

然后我们需要在nav_graph.xml中添加这个布局。

<fragment

android:id=“@+id/map_fragment”

android:name=“com.llw.mvvm.ui.fragment.MapFragment”

android:label=“map_fragment”

tools:layout=“@layout/map_fragment” />

这里配置了,那么底部的菜单同样要配置,毕竟我们是通过菜单去控制Fragment的切换的,打开navigation_menu.xml,在里面添加一个item,代码如下:

<item

android:id=“@+id/map_fragment”

android:icon=“@mipmap/ic_map”

android:title=“地图” />

这个图标可以去我的源码里面去找,或者自己去网上找一个也行。

下面进入到HomeActivity中去配置,配置切换菜单时的Fragment布局改变,如下图所示:

在这里插入图片描述

③ Fragment中地图生命周期绑定

要显示地图需要将地图的生命周期与Fragment的生命周期绑定起来,如下图所示:

在这里插入图片描述

如果你是线上的项目你需要在隐私政策中引入高德SDK的说明,然后在MapFragment中绑定地图的生命周期。

@Override

public void onSaveInstanceState(@NonNull @NotNull Bundle outState) {

super.onSaveInstanceState(outState);

binding.mapView.onSaveInstanceState(outState);

}

@Override

public void onResume() {

super.onResume();

binding.mapView.onResume();

}

@Override

public void onPause() {

super.onPause();

binding.mapView.onPause();

}

@Override

public void onDestroy() {

super.onDestroy();

binding.mapView.onDestroy();

}

下面运行一下:

在这里插入图片描述

现在只是显示了地图,但是并没有定位到我当前所在地,这当然是不行的。

四、显示当前所在地


显示当前所在地则需要定位权限,之前在AndroidManifest.xml中已经配置好了,下面则需要在代码中动态请求。

① 定位动态权限申请

在上一篇文章中写过一个PermissionUtils类,这里给这个类再加一点东西进去,在PermissionUtils中增加如下代码:

public static final String LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;

public static final int REQUEST_LOCATION_CODE = 1003;

然后在getPermissionRequestCode方法中增加一个case,如下图所示:

在这里插入图片描述

下面就是在HomeActivity中请求动态权限了,在HomeActivity中新增如下方法:

/**

  • 请求定位权限

*/

private void requestLocation() {

if (isAndroid6()) {

if (!hasPermission(PermissionUtils.LOCATION)) {

requestPermission(PermissionUtils.LOCATION);

}

} else {

showMsg(“您无需动态请求权限”);

}

}

然后在initView方法中调用它,如下图所示:

在这里插入图片描述

② 地图定位当前所在地

下面回到MapFragment,新增如下代码:

private static final String TAG = MapFragment.class.getSimpleName();

/**

  • 初始化地图

*/

private void initMap() {

//初始化地图控制器对象

AMap aMap = binding.mapView.getMap();

// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false

aMap.setMyLocationEnabled(true);

MyLocationStyle style = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。

style.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;//定位一次,且将视角移动到地图中心点。

aMap.setMyLocationStyle(style);//设置定位蓝点的Style

aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。

aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。

//设置SDK 自带定位消息监听

aMap.setOnMyLocationChangeListener(this);

}

@Override

public void onMyLocationChange(Location location) {

// 定位回调监听

if(location != null) {

Log.e(TAG, "onMyLocationChange 定位成功, lat: " + location.getLatitude() &

  • 27
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值