【问题标题】:Huawei Map Kit - onMapReady() not called after getMapAsync()华为地图套件 - 在 getMapAsync() 之后未调用 onMapReady()
【发布时间】:2021-01-07 07:59:04
【问题描述】:

我正在尝试创建一个使用谷歌地图的项目的定位器功能的华为变体。但我的问题是 onMapReady() 回调在 getMapAsync() 之后根本没有触发

这就是我调用 getMapAsync 的方式:

     val mapFragment = childFragmentManager.findFragmentById(R.id.fragment_huawei_map_container) as SupportMapFragment
     mapFragment.getMapAsync(this@SampleMapsFragment)

当调用 onMapReady() 时,这在使用谷歌地图依赖时效果很好。

但是在使用华为地图依赖时,getMapAsync()后onMapReady回调根本不会触发

【问题讨论】:

  • 您是否在控制台中启用 MapKit?您是否在控制台中检查 SHA-256?
  • 我现在仔细检查以确定,是的,我已经在控制台中放置了 SHA-256 并启用了 mapkit。
  • 你在华为设备上测试吗?地图仅适用于华为设备
  • 我有一个非华为设备,但我做的解决方法是安装 hms core apk
  • 是的,正如我在docs 看到的那样,如果你有最新的 HmsCore 应用和操作系统,最新版本的 MapKit 不需要华为设备>=7

标签: android maps huawei-mobile-services huawei-developers


【解决方案1】:

由于您使用华为的地图套件来执行这些操作,请检查以下内容: 你已经生成了一个sha256密钥并集成了HMS核心,你可以使用这个link来了解如何。

如果您已完成上述所有操作,请确保 agconnect-services.json 位于正确的位置。然后,检查您的清单中是否包含:

最后要检查的是,如果你完成了

我希望其中之一会有所帮助,因为我能够让 onMapReady 触发:

【讨论】:

  • 我现在可以在片段的 onViewCreated 内部调用时显示地图。但是在位置回调中调用 getMapAsync 时出现了一个新问题
  • 很高兴您的问题得到解决。你的新问题是什么?
  • 查看我的帖子更新。就是在 LocationCallback 中调用 getMapAsync
  • 好的,明天有时间我去看看。但公平地说,如果你之前的问题得到了解决,你应该给予人们应得的荣誉。
  • 我删除了更新。我将发布一个新问题,因为这是一个不同的问题。感谢您的帮助
【解决方案2】:

onMapReady 方法需要重新加载。下面介绍如何使用SupportMapFragment 创建地图实例。详情请见docs

  1. 在布局文件中添加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" />
  1. 要在您的应用中使用地图,请在 MainActivity.java 文件中实现 OnMapReadyCallback API。 示例代码如下:
public class SupportMapDemoActivity extends AppCompatActivity implements OnMapReadyCallback {
    ...
}
  1. MainActivity.java文件中,在onCreate()方法中加载SupportMapFragment,并调用getMapAsync()注册回调。 示例代码如下:
private SupportMapFragment mSupportMapFragment; 
mSupportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapfragment_mapfragmentdemo);
mSupportMapFragment.getMapAsync(this);
  1. 调用onMapReady回调获取HuaweiMap对象。 示例代码如下:
public void onMapReady(HuaweiMap huaweiMap) {
    Log.d(TAG, "onMapReady: ");     
    hMap = huaweiMap;
}
  1. 运行您的项目,然后安装您的应用以在您的应用中查看地图。

【讨论】:

  • 您刚刚复制粘贴了文档中的内容。还是谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
  • 2021-12-12
  • 1970-01-01
  • 2020-08-06
相关资源
最近更新 更多