gpt4 book ai didi

android - Android上的百度 map : access key does not work for location searching

转载 作者:太空狗 更新时间:2023-10-29 14:11:52 27 4
gpt4 key购买 nike

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

获得没有叠加层的基本 map 相对容易。 The process is described here (中文,但如果您不懂该语言,则代码不言自明)。下载最新的百度 Android SDK(撰写本文时为 v3.2.0)并将其作为库集成到我的 Eclipse 项目中没有问题,但不要太相信该链接中的文档,即使它是官方文档。他们的示例通常包含甚至无法编译的代码。例如,.jar 文件的名称与您在他们的屏幕截图中看到的完全不同。

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

我需要注册一个百度账号,然后去他们的控制中心生成一个 key 。要为移动设备创建访问 key (“ak”),您需要输入为您的应用程序签名的 keystore 的 SHA1 指纹,然后输入 list 中指定的包名称。然后我将生成的 key 添加到标签下的 list 中

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

然后我从他们的示例项目的 CloudSearchActivity 中复制了代码,因为我有我想要显示的特定坐标。我实现了 CloudListener 接口(interface),如下所示:

@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(根据 this API page,这意味着 STATUS_CODE_SECURITY_CODE_ERROR。现在我不知道该怎么办。我不明白的事情:

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

有什么想法吗?

最佳答案

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

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

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

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

关于android - Android上的百度 map : access key does not work for location searching,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27035969/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com