问题描述
我正在尝试为使用谷歌地图的项目创建定位器功能的华为变体。但我的问题是 onMapReady() 回调在 getMapAsync() 之后根本不会触发
这就是我调用 getMapAsync 的方式:
val mapFragment = childFragmentManager.findFragmentById(R.id.fragment_huawei_map_container) as SupportMapFragment
mapFragment.getMapAsync(this@SampleMapsFragment)
当 onMapReady() 被调用时,这在使用谷歌地图依赖时工作正常。
但是在使用华为地图依赖时,getMapAsync()后根本不触发onMapReady回调
解决方法
由于您使用的是华为地图套件,请检查以下内容: 您已生成 sha256 密钥并集成了 HMS 核心,您可以使用此 link 了解如何操作。
如果您已完成上述所有操作,请确保 agconnect-services.json 位于正确的位置。然后,检查您的清单中是否有:
我希望其中之一会有所帮助,因为我能够让 onMapReady 触发:
,onMapReady 方法需要重新加载。下面介绍如何使用 SupportMapFragment 创建地图实例。如需了解详情,请参阅docs。
- 在布局文件中添加一个Fragment对象(例如activity_main.xml),并在文件中设置地图属性
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/mapfragment_mapfragmentdemo"
class="com.huawei.hms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraTargetLat="48.893478"
map:cameraTargetLng="2.334595"
map:cameraZoom="10" />
- 要在您的应用中使用地图,请在 MainActivity.java 文件中实现 OnMapReadyCallback API。 示例代码如下:
public class SupportMapDemoActivity extends AppCompatActivity implements OnMapReadyCallback {
...
}
- 在 MainActivity.java 文件中,在 onCreate() 方法中加载 SupportMapFragment 并调用 getMapAsync() 来注册回调。 示例代码如下:
private SupportMapFragment mSupportMapFragment;
mSupportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapfragment_mapfragmentdemo);
mSupportMapFragment.getMapAsync(this);
- 调用 onMapReady 回调获取 HuaweiMap 对象。 示例代码如下:
public void onMapReady(HuaweiMap huaweiMap) {
Log.d(TAG,"onMapReady: ");
hMap = huaweiMap;
}
- 运行您的项目,然后安装您的应用以在您的应用中查看地图。