2013-03-11 61 views
1

首先我知道這裏有很多關於這個問題的線索,但是我把它們都讀了,並且嘗試了幾乎所有的東西。 那麼我的問題是什麼。我正在開發一個帶有Google地圖的應用程序,並且我也發生了一個衆所周知的問題,即mapView加載得很好,但它不包含任何內容(只有灰色的空白矩形)。Android地圖視圖尚未加載內容

這裏是我的嘗試:

  • 我tripplecheck我API代碼
  • 我再生我的API代碼
  • 我檢查所有的permmisions
  • 和很多其他的東西

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 

希望你能幫助我。

+0

我認爲你是在模擬器右測試這個? – 2013-03-11 16:58:58

+0

無論是在仿真器還是在平板電腦上 – 2013-03-11 17:07:45

+0

如果您在模擬器版本API 8或API 9中運行此操作,這是仿真器的已知錯誤,請參閱此錯誤報告服務不可用。 http://code.google.com/p/android/issues/detail?id=8816 – 2013-03-11 17:10:24

回答

-3

用您的實際API密鑰替換清單中的「我的密鑰」。

android:apiKey="my key"/> 

API密鑰可以在這裏otained: https://developers.google.com/maps/documentation/android/start#obtaining_an_api_key

+0

我用我的鑰匙取代我現在的鑰匙我的鑰匙就在這裏:)我有從google – 2013-03-11 17:19:36

+0

正確獲得我的api密鑰哦,好的。對不起:)然後做了相同的API密鑰工作? 因爲一些人發佈「無法獲得連接工廠客戶端」是一個奇怪的消息無效的apiKey!「: http://stackoverflow.com/questions/2199403/couldnt-get-connection-factory-client 可能試圖獲得一個新的密鑰,如果它還沒有工作之前... – usb79 2013-03-11 17:27:45

+0

不,它不工作,仍然是同樣的問題 – 2013-03-11 17:29:03

0

由於12/2012谷歌發佈了谷歌地圖版本2. 這意味着,新的應用程序應該使用這個版本,並只對所提供的API密鑰v2地圖。
您的實施似乎是針對google maps 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" /> 

還到您的手機上運行谷歌地圖,你需要安裝谷歌播放服務。爲了檢查它是否已經安裝並且谷歌地圖v2可以在您的設備上運行,我建議您使用使用v2地圖的應用程序,如trulia

+0

我試過應用程序和地圖不顯示,但我不知道這對我意味着什麼: D – 2013-03-11 18:12:31

+0

請檢查編輯答案 – 2013-03-12 09:31:57

3

入住此...

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

你需要重寫所有的方法。不要錯過任何一個。

我做到了,我得到了一個可用的MapView。

(onLowMemory似乎可以跳過。)

(MapView的作品比MapFragment更好。)

+0

正確答案。我不知道他們爲什麼搬到MapFragment。 – Dejan 2016-06-20 11:48:25

+0

正確答案!!!! – 2017-10-19 10:26:59

1

由於hsu.tw指出的那樣,我們需要從片段生命週期方法調用MapView生命週期方法。

但有MapView的佈局文件的部分導致問題,因爲的onCreate充氣片段之前調用佈局[所以MapView's onCreate()永遠不會被調用。

下面的方法適用於我。 [可能需要採取消除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() 
    } 
}