实现地理位置消息功能

更新时间: 2024/03/15 18:26:20

自 IM UIKit v9.3.0 开始,IM UIKit 的会话消息模块(chatkit-ui)支持地理位置消息功能。

功能介绍

IM UIKit 的默认界面已经实现了地理位置消息的发送按钮、UI 展示和接收逻辑。仅需三步,即可在您的应用实现地理位置消息的收发。

如果您的应用不需要地理位置消息的发送按钮,您也可以将其从界面上移除。

前提条件

开始集成地理位置消息功能前,请确保:

实现方法

实现地理位置消息收发

步骤1:引入依赖

在您的工程的build.gradle中添加locaitonkit模块的依赖。

javadependencies {
    implementation("com.netease.yunxin.kit.locationkit:locationkit:${LATEST_VERSION}")

}

步骤2:配置高德地图服务

地理位置消息功能基于高德地图,因此需要您配置高德地图相关信息。请在您应用的AndroidManifest.xml中配置高德地图的 API Key 和定位服务(APSService)

xml<!-- 高德地图定位 -->
//在您的applicaion节点中配置高德地图 API Key 和 APSService
<application android:name=".IMApplication">
    <meta-data
        android:name="com.amap.api.v2.apikey"
        android:value="apikey" /> // 传入您获取到的高德地图 API Key
    <service android:name="com.amap.api.location.APSService" />
</application>

步骤3:地理位置消息初始化

在 Application 的onCreate中对地理位置消息进行初始化。

javapublic class IMApplication extends MultiDexApplication {

    @Override
    public void onCreate() {

        if (IMKitUtils.isMainProcess(this)) {
            //位置消息模块需要初始化
            LocationKitClient.init();
        }
    
    }
    
}

初始化完成后,您的应用即可实现地理位置消息功能。

实现按钮移除

会话消息模块(chatkit-ui)也支持移除发送地图位置消息的按钮。

如果您的业务不再需要地图功能,可以在不依赖LocationKit的同时,去除发送地图位置消息的按钮。

示例代码:

javaChatUIConfig chatUIConfig = new ChatUIConfig();
chatUIConfig.chatInputMenu =
            new IChatInputMenu() {
              @Override
              public List<ActionItem> customizeInputBar(List<ActionItem> actionItemList) {
                //个性化配置输入框下方按钮,actionItemList传递默认配置的四个按钮:语音、表情、图片和更多。
                //您可以根据自己的需求修改actionItemList的数量和顺序,ChatKit-UI会按照您的返回结果展示。
                return actionItemList;
              }

              @Override
              public List<ActionItem> customizeInputMore(List<ActionItem> actionItemList) {
              //个性化配置更多面板中按钮,actionItemList传递默认配置的四个按钮:拍摄、文件、位置和音视频通话。
                  for (int index = 0;index < actionItemList.size();index++){
                  //根据Action判断按钮是否删除
                      if (TextUtils.equals(actionItemList.get(index).getAction(),
                              ActionConstants.ACTION_TYPE_LOCATION)){
                          actionItemList.remove(index);
                          break;
                      }
                  }
                  return actionItemList;
              }

              @Override
              public boolean onCustomInputClick(Context context, View view, String action) {
                return false;
              }
            };

常见问题

为什么地图没有定位到当前位置?

  • 确认手机已打开定位服务。

  • 确认应用已授权位置权限。

  • 确认在日志中是否出现如下类似报错:定位失败, code:7 -->> KEY错误。一般导致该错误的原因为高德地图配置打包机器的 SHA1 和高德控制台配置的不一致

    将日志上打印出来的 SHA1 配置到高德地图即可解决,更多详情参见高德开放平台的常见问题

其他高德地图问题

如遇到其他报错,可参考高德开放平台的错误码列表高德开放平台的常见问题进行排查。

此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 前提条件
  • 实现方法
  • 实现地理位置消息收发
  • 步骤1:引入依赖
  • 步骤2:配置高德地图服务
  • 步骤3:地理位置消息初始化
  • 实现按钮移除
  • 常见问题
  • 为什么地图没有定位到当前位置?
  • 其他高德地图问题