【问题标题】:Android google map shows blankAndroid 谷歌地图显示空白
【发布时间】:2013-10-29 22:01:40
【问题描述】:

我正在尝试实施谷歌地图 V2,但地图显示为空白。我已经编辑了清单,创建了 xml 布局和活动,但地图显示为空白。

这是我对清单所做的:

<permission
        android:name="com.biznismap.com.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="com.biznismap.com.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

并将其添加为清单中应用程序节点的第一个子节点:

<uses-library android:name="com.google.android.maps" />

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="my_key" />

这是我的地图 xml 布局:

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.maps.MapView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:apiKey="my_key"
    android:clickable="true" />

这是我的 MapActivity:

public class ListingMap extends MapActivity {

    private HelloItemizedOverlay itemizedoverlay;
    private List<Overlay> mapOverlays;
    private String lat, lng;

    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listing_map);
        MapView mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);

        mapOverlays = mapView.getOverlays();
        Drawable drawable = this.getResources().getDrawable(
                R.drawable.ic_launcher);
        itemizedoverlay = new HelloItemizedOverlay(drawable);
        getExtras();
    }

    private void getExtras() {
        Bundle extras = getIntent().getExtras();
        lat = extras.getString("lat");
        lng = extras.getString("lng");
        Log.v("--", lat+" "+lng);
        float latitude=Float.valueOf(lat);
        float longitude=Float.valueOf(lng);
        GeoPoint point = new GeoPoint((int)(latitude * 1E6),(int)(longitude * 1E6));
        OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!",
                "I'm in Mexico City!");
        itemizedoverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedoverlay);
    }

}

所以一切正常,但是当我想显示一些东西时,地图是空白的,我从模拟器中得到了这个:

06-02 17:09:26.921: E/MapActivity(1772): Couldn't get connection factory client

那么我哪里出错了,我该如何解决这个问题?

【问题讨论】:

  • 愚蠢的问题,但是您添加了正确的密钥吗?你在使用 google APIs enabled sdk
  • @varun 我想是的,刚刚为 android 应用注册了一个新密钥,输入了我的包名等。所以我想就是这样

标签: android android-mapview android-maps android-maps-v2


【解决方案1】:

这里有两个问题。在 v2 中,您可能无法使用

<uses-library android:name="com.google.android.maps" />

,并且您的布局无效。如果你想要完整的布局地图,只需使用这个:

<FrameLayout
... >

    <fragment
        ...
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment" />
</FrameLayout>

在您的 Java 代码中,使用 FragmentActivity 并:

    map = ((SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.your_id)).getMap();

这样,您将获得与预蜂窝设备的兼容性。祝你好运!

【讨论】:

  • @Divya Motiwala 相同的回应 ;)
  • 继续认为我的答案是有效的,展示了一个示例,并且是第一个发布的,但是......这是 Darko 的决定
【解决方案2】:

https://developers.google.com/maps/documentation/android/v1/hello-mapview 是这样说的:

注意:Google Maps Android API 版本 1 已于 2012 年 12 月 3 日正式弃用。这意味着从 2013 年 3 月 18 日起,您将无法再请求此版本的 API 密钥。 Google Maps Android API v1 不会添加任何新功能。但是,使用 v1 的应用程序将继续在设备上运行。鼓励现有和新开发者使用 Google Maps Android API v2。

您的代码是 miximg v1 和 v2 属性。

【讨论】:

    【解决方案3】:

    要么您没有互联网连接(我猜),要么您输入的密钥不正确。仔细检查这两件事。

    此外,请确保您用于测试的模拟器(如果适用)已安装 Google API。

    【讨论】:

    • 问题出在包名上。因为我的主包是 com.myapp.com,但我的地图活动在 com.myapp.com.activities 中?
    【解决方案4】:

    MapView 不再与 API v2 一起使用。而是使用:

       <fragment
          android:id="@+id/map"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:name="com.google.android.gms.maps.SupportMapFragment"/>
    

    因此,使用FragmentActivity 而不是MapActivity 并膨胀地图。

    您可以查看Loading Map using Google Map API V2了解更多详情

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 2016-01-10
      • 2016-04-09
      • 1970-01-01
      • 2011-08-11
      相关资源
      最近更新 更多