【问题标题】:Android Map View is not loading contentAndroid 地图视图未加载内容
【发布时间】:2013-03-11 16:53:24
【问题描述】:

首先我知道这里有很多关于这个问题的主题,但我都阅读了它们,并且尝试了几乎所有的东西。 那么我的问题是什么。我正在使用谷歌地图开发一个应用程序,我也遇到了一个众所周知的问题,即 mapView 加载正常,但它不包含任何内容(只有灰色的空白矩形)。

这是我尝试过的:

  • 我对我的 API 代码进行了三次检查
  • 我重新生成了我的 API 代码
  • 我检查了所有权限
  • 还有很多其他的东西

main_layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<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:clickable="true"
    android:enabled="true"
    android:apiKey="my key"/>

</RelativeLayout>

清单:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gps.gpsclientsoftware"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />



    <application

        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <uses-library android:name="com.google.android.maps"/> 
        <activity
            android:name="com.gps.gpsclientsoftware.GPSClientActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


    </application>


</manifest>

活动代码:

package com.gps.gpsclientsoftware;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class GPSClientActivity extends MapActivity {

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


    }


    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }

}

我在启动应用程序时发现的一个警告是:

03-11 17:51:03.751: E/MapActivity(8581): Couldn't get connection factory client

希望你能帮助我。

【问题讨论】:

  • 我想你是在模拟器中测试这个吧??
  • 在模拟器和平板电脑中都有
  • 如果您在模拟器中运行它,无论是 API 8 还是 API 9,这是模拟器的一个已知错误,请参阅此错误报告服务不可用。 code.google.com/p/android/issues/detail?id=8816
  • 你解决了吗?我正在尝试在我的设备上运行它(4.3 Android Galaxy Nexus)
  • 我只是切换到 OSMdroid 地图,使用更简单,你想要的都有

标签: java android google-maps android-mapview


【解决方案1】:

检查一下...

http://ucla.jamesyxu.com/?p=287

你需要重写所有的方法。不要错过任何一个。

我做到了,我得到了一个工作的 MapView。

(onLowMemory 好像可以跳过。)

(MapView 比 MapFragment 效果更好。)

【讨论】:

  • 正确答案。我不知道他们为什么搬到 MapFragment。
  • 出于某种原因,对于 MapView,此步骤是必要的。对我来说很好。谢谢。
【解决方案2】:

自 2012 年 12 月 12 日起,Google 发布了 Google 地图第 2 版。 这意味着新应用程序应使用此版本,并且仅为 v2 地图提供 api 密钥。
您的实施似乎适用于谷歌地图 v1。
查看here 以获取详细指南,但快速浏览一下,我发现您的 android 清单中缺少以下内容:

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="your_api_key"/>
<permission
        android:name="your.project.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>

<uses-permission android:name="your.project.permission.MAPS_RECEIVE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="your key" />

此外,要在手机上运行谷歌地图,您还需要安装 google play 服务。为了检查它是否已安装并且 google maps v2 在您的设备上运行,我建议使用使用 v2 地图的应用程序,例如 trulia

【讨论】:

  • 我试过那个应用程序和地图没有显示,但我不知道这对我意味着什么:D
【解决方案3】:

正如hsu.tw所指出的,我们需要从片段生命周期方法中调用MapView的生命周期方法。

但布局文件的 MapView 部分会导致问题,因为在扩展片段布局之前调用 onCreate [所以永远不会调用 MapView's onCreate()]。

以下方法对我有用。 [如果您将此 Fragment 添加到 BackStack,可能需要注意删除 MapView]

class MapFragment : BaseFragment() {

    var mapView: MapView? = null

    override fun getFragmentLayout() = R.layout.fragment_map

    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        (view as? LinearLayout)?.addView(mapView, LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.MATCH_PARENT))
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // create map view
        mapView = MapView(context /*, GoogleMapOption for configuration*/)
        mapView?.onCreate(savedInstanceState)
    }

    override fun onStart() {
        super.onStart()
        mapView?.onStart()
    }

    override fun onPause() {
        super.onPause()
        mapView?.onPause()
    }

    override fun onResume() {
        super.onResume()
        mapView?.onResume()
    }

    override fun onSaveInstanceState(outState: Bundle?) {
        super.onSaveInstanceState(outState)
        mapView?.onSaveInstanceState(outState)
    }

    override fun onStop() {
        super.onStop()
        mapView?.onStop()
    }

    override fun onLowMemory() {
        super.onLowMemory()
        mapView?.onLowMemory()
    }

    override fun onDestroy() {
        super.onDestroy()
        mapView?.onDestroy()
    }
}

【讨论】:

  • 酷~~我想念那个。
【解决方案4】:

将清单中的“我的密钥”替换为您的实际 API 密钥。

android:apiKey="my key"/>

可以在此处获取 API 密钥: https://developers.google.com/maps/documentation/android/start#obtaining_an_api_key

【讨论】:

  • 我将我当前的密钥替换为 my key just here :) 我已经从 google 正确获取了我的 api 密钥
  • 哦,好的。那么抱歉 :) 以前是否使用过相同的 API 密钥?因为有人发帖说““无法获取连接工厂客户端”对于无效的 apiKey 来说是一条奇怪的消息!”:stackoverflow.com/questions/2199403/… 可能尝试获取一个新的密钥,如果它之前还没有工作......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2018-09-27
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 2011-09-17
相关资源
最近更新 更多