Android 版百度地图:访问键无法用于位置搜索

2024-04-19

我正在为中国客户创建一个 Android 应用程序,他们需要地图集成,因此 Google 地图不是一个选择,因为所有 Google 服务在中国都被屏蔽。我正在尝试使用百度地图,它被称为百度LBS(基于位置的服务)云。

获得没有叠加层的基本地图相对容易。该过程描述如下 http://developer.baidu.com/map/wiki/index.php?title=androidsdk/guide/hellobaidumap(中文,但如果您不懂该语言,代码就不言而喻)。下载最新的百度 Android SDK(撰写本文时为 v3.2.0)并将其作为库集成到我的 Eclipse 项目中没有问题,但不要太相信该链接中的文档,即使它是官方文档。他们的示例通常包含甚至无法编译的代码。例如,.jar 文件的名称与您在屏幕截图中看到的完全不同。

哦,他们的 .jar 库也被混淆了,使用起来非常烦人:-(

我需要注册一个百度帐户并去他们的控制中心生成密钥。要为移动设备创建访问密钥(“ak”),您需要输入对您的应用程序进行签名的密钥库的 SHA1 指纹,后跟清单中指定的包名称。 然后我将生成的密钥添加到标签下的清单中

<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="xxx...xxx" />

然后,我从他们的示例项目 Cloud Search Activity 中复制了代码,因为我有想要显示的特定坐标。我实现了云监听器接口,如下所示:

@Override
public void onGetSearchResult(final CloudSearchResult result, final int error)
{
    Log.w("onGetSearchResult", "status=" + result.status + ". size=" + result.size + ". total=" + result.total + ". error=" + error);
    if(null != result && null != result.poiList && 0 < result.poiList.size())
    {
      mBaiduMap.clear();
      final BitmapDescriptor bitmapDescriptor=BitmapDescriptorFactory.fromResource(R.drawable.icon_address_grey);
      LatLng latitudeLongitude;
      LatLngBounds.Builder builder=new Builder();
      for(final CloudPoiInfo info : result.poiList)
      {
        latitudeLongitude=new LatLng(info.latitude, info.longitude);
        final OverlayOptions overlayOptions=new MarkerOptions().icon(bitmapDescriptor).position(latitudeLongitude);
        mBaiduMap.addOverlay(overlayOptions);
        builder.include(latitudeLongitude);
      }
      final LatLngBounds bounds=builder.build();
      MapStatusUpdate mapStatusUpdate=MapStatusUpdateFactory.newLatLngBounds(bounds);
      mBaiduMap.animateMapStatus(mapStatusUpdate);
    }
}

我添加了代码来启动查询(也从他们的示例项目复制):

  @Override
  public View onCreateView(final LayoutInflater layoutInflater, final ViewGroup viewGroup,
    final Bundle savedInstanceState)
  {
    // initialize needs to be called
    SDKInitializer.initialize(getApplication());
    CloudManager.getInstance().init(MyFragment.this);

    view=(ViewGroup)layoutInflater.inflate(R.layout.fragment_map, viewGroup, false);

    mMapView=(MapView)view.findViewById(R.id.baiduMapView);
    mBaiduMap=mMapView.getMap();

    NearbySearchInfo info=new NearbySearchInfo();
    info.ak="xxx...xxx";
    info.geoTableId=12345;
    info.tags="";
    info.radius=30000;
    info.location="116.403689,39.914957";
    CloudManager.getInstance().nearbySearch(info);

    return view;
  }

不幸的是,我不断从服务器获得状态值 102(根据这个API页面 http://developer.baidu.com/map/android_refer/com/baidu/mapapi/cloud/BaseSearchResult.html这意味着STATUS_CODE_SECURITY_CODE_ERROR。现在我不知道该怎么办。 我不明白的事情:

  1. 为什么在构建查询时需要重复访问密钥(“ak”)?在清单中包含一次还不够吗?
  2. 查询中的“geoTableId”值应该是什么?

有任何想法吗?


经过几个小时的研究,我在开放问题上取得了一些进展。

  1. 云搜索查询中“ak”字段的原因不是重复,它实际上是不同的访问键。在某个隐藏的地方,百度表示“移动设备”的访问键不适用于这些云搜索,您需要一个“服务器”的 ak。所以解决办法就是回到百度控制中心再创建一个“for server”密钥。该密钥需要在查询中使用,而“for mobile”密钥需要保留在清单中。

  2. geoTableId 是您帐户的标识符,与访问密钥相似。这是一个(目前)5 位数字,您需要在百度控制中心获取。其他密钥是在标题为“API Console”(API 控制台)的选项卡中生成的,但对于 geoTableId,您需要切换到名为“Data Management”(数据管理)的选项卡。我想我需要按左上角的“创建”(~创建)按钮,然后输入一个名称,选择“是”(是),他们询问这是否要发布(不确定翻译),然后单击“保存”(保存)。此后,您新生成的号码将显示在顶部字段中,位于您刚才选择的名称后面的括号中。

这些步骤使我能够发送“成功”查询,其中服务器以状态 0 (STATUS_CODE_SUCCEED) 进行应答。然而,到目前为止,我得到的所有答案都是空的,我还没有找到产生非空答案的查询。如果有人设法做到这一点,请告诉我!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 版百度地图:访问键无法用于位置搜索 的相关文章

随机推荐

  • 在不知道其类型的情况下获取字典键值对

    我有一个对象instance为此 instance GetType GetGenericTypeDefinition typeof Dictionary lt gt 是真的 我的问题是 如何在实际不知道其泛型类型的情况下从该对象中提取键值对
  • javascript 中用于日期验证的正则表达式

    请有人提供日期验证正则表达式 这将允许以下规则是 它应该允许月 日 年 月 日 年 月 日 年 月 日 年 不允许yy 月份 30 和 31 验证的天数 闰年和非闰年的二月验证 不要尝试解析日期entirely使用正则表达式 跟随KISS原
  • 添加 firebase crashlytics 后,React 本机应用程序卡在启动屏幕上?

    我正在开发 React Native 应用程序 该应用程序运行良好 但是 当我导入 firebase crashlytics 时 如果我再次删除它 它会卡在启动屏幕上 应用程序工作正常吗 由于我是新手 我无法找到此问题的根本原因 我正在尝试
  • 使用 jquery UI 确认表单提交

    我正在尝试确认使用 ruby on Rails 创建的提交表单 但在提交之前 我有一个条件 即打开一个确认弹出窗口 询问用户是否真的想要这样做 这与默认的确认浏览器框一起使用 但现在我尝试使用 Jquery UI 来做到这一点 但它不起作用
  • 如何在 BigQuery 中构建“星级”报告(或迷你图或颜色渐变)

    假设我有以下示例输入 WITH Ratings AS SELECT A name 2 score UNION ALL SELECT B name 0 score UNION ALL SELECT C name 5 score UNION A
  • Firebase 控制台中不存在下载 URL

    firebase 存储的文件位置中不存在 url 相反 它提供了一个存储路径 请帮忙 在此输入图像描述 https i stack imgur com JFWAJ png 只需点击图片即可看到您的网址 要通过 Flutter 获取 URL
  • 如何可移植地乘以 64 位操作数并获得 128 位结果?

    对于 x64 我可以使用这个 uint64 t hi lo hi lo 64bit x 64bit multiply of c 0 and b 0 asm mulq 3 n t d hi a lo a c 0 rm b 0 cc a 0 h
  • 将 Archetype 新闻项目迁移到 Dexterity 内容类型

    我正在尝试将新闻项目中的内容复制到我编写的其他内容类型 在我的脚本中我有news项目和project物品 第二 project 是使用 Dexterity 定义的内容类型 如果我可以复制图像和正文 那就太好了news to project在
  • 如何使用端口 1025-5000 作为临时端口来解决 WinXP 问题?

    如果您使用端口 0 而不是非零端口创建 TCP 客户端套接字 则操作系统会为您选择任何空闲的临时端口 大多数操作系统选择临时端口IANA 动态端口范围 http www iana org assignments port numbers49
  • 为什么这个游戏无法开始,它正在循环[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我已经检查了这段代码的每一寸 我无法找出是什么导致它进入循环 一旦我按下按键开始 它就会播放开始噪音 然后它会转到结束屏幕 并说按按键再次
  • 调用 GC.Collect 和 GC.WaitForPendingFinalizers 时会发生死锁吗?

    鉴于以下情况 GC Collect GC MaxGeneration GC WaitForPendingFinalizers GC Collect GC MaxGeneration 考虑到多线程和垃圾收集模式 什么情况下会出现死锁WaitF
  • (1U << X) 有什么作用?

    我找到了这段代码 enum IsDynamic 1U lt lt 0 IsSharable 1U lt lt 1 IsStrong 1U lt lt 2 什么是 1U lt lt X do 它设置位掩码 1U lt lt 0 1 1U lt
  • 如何在mongoengine中通过oid搜索文档

    我需要通过 oid 从 db 获取文档 例如 Docs objects id 4f4381f4e779897a2c000009 但如何做到这一点 如果 id 需要 ObjectId 对象 即使我尝试从 pymongo 设置 ObjectId
  • 时间计算类型不匹配

    我正在尝试计算seconds两个日期之间的差异保留两位小数 但是 每当我执行代码时 都会收到错误 13 类型不匹配 我在网上搜索并尝试了许多变体 但总是以类型不匹配而告终 我不知道如何解决这个问题 有人可以教我怎么做吗 INFO 最初使用的
  • 使用“make-series”运算符而不定义确切的日期范围

    我在用make series创建一个错误仪表板 以指定的时间间隔显示给定时间段内的事件 如下所示 make series dcount id default 0 on timestamp from ago 30d to now step 8
  • 使用 pyinstaller 在所有系统上保留字体

    我使用 tkinter 制作了一个 GUI 我用 pyinstaller 创建了 onefile exe 但设置的字体 font freesans ttf 不适用于其他计算机 我想我需要添加字体 但在与我类似的情况下 我不明白 pygame
  • 球体表面上测地线(最短距离路径)之间的交点

    我进行了广泛的搜索 但尚未找到该问题的合适答案 给定球体上的两条线 每条线由起点和终点定义 确定它们是否相交以及相交的位置 我找到了这个网站 http mathforum org library drmath view 62205 html
  • PowerShell 未启动

    由于某种原因 PowerShell 不再在我的计算机上打开 打开 PowerShell 会显示以下内容 但永远不会完成打开并且永远不会显示提示 Windows PowerShell Copyright C Microsoft Corpora
  • Android 模拟器上的 Mockito

    Android 新手尝试在 Android 中使用我最喜欢的 Java 测试工具 我正在尝试使用 Mockito 1 9 5 如以下博客文章中所述 但无法在我的模拟器上运行测试 我目前没有用于测试的物理设备 Mockit Android 教
  • Android 版百度地图:访问键无法用于位置搜索

    我正在为中国客户创建一个 Android 应用程序 他们需要地图集成 因此 Google 地图不是一个选择 因为所有 Google 服务在中国都被屏蔽 我正在尝试使用百度地图 它被称为百度LBS 基于位置的服务 云 获得没有叠加层的基本地图