Android MapActivity:无法获得连接工厂客户端

ele*_*nny 14 android google-maps mapactivity mylocationoverlay

我正在尝试使用Google API示例项目中提供的地图演示.我正在使用AVD并尝试使用版本8,10和11并获得相同的问题.

我已经生成了自己的调试密钥并添加到项目中.我可以看到应用程序启动时的地图,并可以放大等 - 所以我得到地图图块,很好.是的 - 我在清单文件中设置了正确的权限和库(根据示例).

但是,我无法通过DDMS或Telnet在地图上设置位置.我在LogCat中看到以下错误:MapActivity:无法获取连接工厂客户端

我已经阅读了很多关于这个问题的线索,但它们似乎总是由于API密钥错误而导致的; 我没有,因为我正在检索地图图块.

所以我创建了自己的项目来进一步测试,并在初始化我的地图时执行以下代码:

    myLocationOverlay = new MyLocationOverlay(this, mapView);
       mapView.getOverlays().add(myLocationOverlay);
       myLocationOverlay.enableCompass();
       myLocationOverlay.enableMyLocation();
       Log.i("funkatron: ", "ABOUT TO CALL RUN ON FIRST FIX");
       myLocationOverlay.runOnFirstFix(new Runnable() {
           public void run() {
               String loc = "we have a location, executing AnimateTo().
"+myLocationOverlay.getMyLocation().toString();
               Log.i("funkatron:",loc);

mapController.animateTo(myLocationOverlay.getMyLocation());
           }
       });
Run Code Online (Sandbox Code Playgroud)

我看到我的第一个日志语句,但从来没有第二个,并且"MapActivity:无法获取连接工厂客户端"在此时被写入LogCat.

我已经读过SDK v8模拟器存在问题,所以我尝试了v10和11 - 但仍然没有乐趣.我还没有在实际的设备上试过这个 - 很快就会做到.

任何关于这个问题的帮助将不胜感激 - 这真让我感到困惑;)

干杯

Die*_*ner 6

我和你描述的初始情况完全相同.

当你看到地图图块时,显然有一些人在地图上看到一个位置:

1.你需要一个位置.我认识到仅通过DDMS视图设置地理位置到模拟器是不够的.每次DDMS中的"发送"按钮都必须明确按下以在模拟器上触发位置更新.(仅仅提一下:在一个真实的设备上,你有时会走一点让你的设备获得位置更新;),我很生气,直到我走来走去想着现在该做什么^^)

2.您需要使用正确的OverlayItem正确实现ItemizedOverlay.我写了自己的叠加层,有点"复杂".如果您不确定您的实现是否正确,请使用本指南创建一个具有最小更改的实现Map视图教程Android开发人员

或使用此:

private class MyItemizedOverlay extends ItemizedOverlay {
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

    public MyItemizedOverlay(Drawable defaultMarker) {
          super(boundCenterBottom(defaultMarker));
    }

    public void addOverlay(OverlayItem overlay) {
        mOverlays.add(overlay);
        populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
      return mOverlays.get(i);
    }

    @Override
    public int size() {
      return mOverlays.size();
    }
}

private void updateLocationOverlay() {
    if (location == null) { return };
    List<Overlay> mapOverlays = mapView.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.XXXX);
    MyItemizedOverlay myItemizedOverlay = new MyItemizedOverlay(drawable);
    GeoPoint point = new GeoPoint((int)(location.getLatitude() * 1E6), (int)(location.getLongitude() * 1E6));

    OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");
    myItemizedOverlay.addOverlay(overlayitem);
    mapOverlays.add(myItemizedOverlay);
}
Run Code Online (Sandbox Code Playgroud)

我想特别指出你必须在drawable上调用boundCenter或boundCenterBottom.否则它不会被绘制.如果你在overlayItem.setMarker的同一个叠加层中使用不同的标记,也要小心,你也可以在那里调用它.

3.你必须将地图上的视图移动到您的观点.你可以这样做:

MapController mapController = mapView.getController();
mapController.setCenter(point)
Run Code Online (Sandbox Code Playgroud)

我认识到函数 mapController.zoomToSpan不起作用.(至少对我而言,我仍在开发此应用程序).也许与animateTo相同.我没试过.设置中心工作.(还有setZoom级别).

也许在我提到的观点中有一些可能会导致您的地图无法正常工作的内容.

祝好运!

编辑:我忘了提到我仍然得到工厂客户端错误,即使它有效地获得一个有效的位置,真正的设备和虚拟模拟器通过ddms发送).我暂时不理睬.