2013-03-09 33 views
0

我試圖創建SDK版本10 MapView的,但如何創建MapView類的所有實例使用Fragments,這是隻有在API 11如何在沒有SDK級別11的情況下創建Android Google MapView?

https://developers.google.com/maps/documentation/android/map#add_a_map_to_an_android_application

我不想添加一個額外的支持庫。

我能夠讓應用程序加載,但地圖顯示爲空的灰色網格。這些在日誌文件中顯示爲唯一的半相關行:

03-08 23:20:25.088: W/dalvikvm(32615): VFY: unable to resolve instance field 23 
03-08 23:20:25.088: D/dalvikvm(32615): VFY: replacing opcode 0x52 at 0x0012 
03-08 23:20:25.088: D/dalvikvm(32615): VFY: dead code 0x0014-0018 in Lcom/google/android/gms/common/GooglePlayServicesUtil;.b (Landroid/content/res/Resources;)Z 
03-08 23:20:25.213: D/dalvikvm(32615): GC_CONCURRENT freed 1276K, 48% free 3765K/7175K, external 9476K/10157K, paused 5ms+8ms 
03-08 23:20:25.236: I/dalvikvm(32615): Total arena pages for JIT: 11 
03-08 23:20:25.541: W/dalvikvm(32615): Unable to resolve superclass of Lmaps/p/s; (427) 
03-08 23:20:25.541: W/dalvikvm(32615): Link of class 'Lmaps/p/s;' failed 
03-08 23:20:25.541: W/dalvikvm(32615): Unable to resolve superclass of Lmaps/y/bo; (3820) 
03-08 23:20:25.541: W/dalvikvm(32615): Link of class 'Lmaps/y/bo;' failed 
03-08 23:20:25.541: W/dalvikvm(32615): Unable to resolve superclass of Lmaps/i/k; (4208) 
03-08 23:20:25.541: W/dalvikvm(32615): Link of class 'Lmaps/i/k;' failed 
03-08 23:20:25.541: E/dalvikvm(32615): Could not find class 'maps.i.k', referenced from method maps.z.ag.a 
03-08 23:20:25.541: W/dalvikvm(32615): VFY: unable to resolve new-instance 3540 (Lmaps/i/k;) in Lmaps/z/ag; 
03-08 23:20:25.541: D/dalvikvm(32615): VFY: replacing opcode 0x22 at 0x006d 
03-08 23:20:25.627: D/dalvikvm(32615): VFY: dead code 0x006f-007f in Lmaps/z/ag;.a (Landroid/view/LayoutInflater;Lcom/google/android/gms/maps/GoogleMapOptions;ZLjava/lang/String;)Lmaps/z/ag; 
03-08 23:20:26.275: D/MPAY(32615): map = [email protected] 
+0

您是否想說您不想使用Fragments for MapView? – GrIsHu 2013-03-09 03:49:58

+0

正確,因爲它不支持API-10,許多手機都沒有Honeycomb。仍有[MapView](https://developers.google.com/maps/documentation/android/map#mapview),但他們不提供說明! – Chloe 2013-03-09 04:30:24

+0

你可以查看我的答案。 – GrIsHu 2013-03-09 04:34:38

回答

0

我發現瞭如何。這是一堆小事情,包括我必須實現onResume(),onPause()等......我認爲我可以放棄調用mapView.onCreate()進行測試,但我認爲這還不夠。

我還發現,在谷歌的樣本播放庫...\Java\android-sdk\extras\google\google_play_services\samples\maps\src\com\example\mapdemo\RawMapViewDemoActivity.java

的例子擴展FragmentActivity,但是這是沒有必要的,也不是進口android.support.v4。*。

public class RawMapViewDemoActivity extends Activity { 
    private MapView mMapView; 
    private GoogleMap mMap; 

    protected void onCreate(Bundle savedInstanceState) { 
     ... 
     mMapView = (MapView) findViewById(R.id.map); 
     mMapView.onCreate(savedInstanceState); 


    protected void onResume() { 
     super.onResume(); 
     mMapView.onResume(); 

    protected void onPause() { 
     mMapView.onPause(); 
     super.onPause(); 


    protected void onDestroy() { 
     mMapView.onDestroy(); 
     super.onDestroy(); 


    public void onLowMemory() { 
     super.onLowMemory(); 
     mMapView.onLowMemory(); 


    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     mMapView.onSaveInstanceState(outState); 
+0

我有類似的問題,你解決了你的問題嗎? – dumbfingers 2013-03-25 11:01:14

+0

是的,這工作。 – Chloe 2013-03-25 19:36:02

0

我認爲答案是您(可能)不能。

Google Maps Android API v2概述這樣說:

  • 地圖現在封裝在MapFragment類,Android的碎片類的擴展。現在,您可以將地圖添加爲較大的活動 活動。使用MapFragment對象,您可以在較小的屏幕上(如手機)自行顯示地圖,也可以在較大屏幕設備(如平板電腦)上將其作爲更復雜的UI的一部分。
  • 因爲地圖被封裝在MapFragment類,可以通過擴展Android標準Activity類實現它們, 而非雖然沒有明確說明在擴展版本1

使用MapActivity,我認爲這意味着v2中的Maps從根本上依賴於Fragment。

如果您需要使用SDK 10或更舊版本,並且無法使用Fragment的某種backport,那麼您可能無法使用Google Maps API v2。

+0

他們仍然有[MapView](https://developers.google.com/maps/documentation/android/map#mapview)類,但他們沒有給出任何使用它的說明! – Chloe 2013-03-09 04:37:55

1

作爲片段從API 11或以上和地圖支持現在被封裝在MapFragment類,Android的Fragment類的擴展。現在,您可以將地圖添加爲更大的活動。使用MapFragment對象,您可以在較小的屏幕上(如手機)顯示地圖,也可以在較大屏幕設備(如平板電腦)上顯示更復雜的用戶界面。所以谷歌也提供了支持庫來在API 11或更低版本中實現它。

您可以在應用程序中使用android-support-v4.jar庫和實施的GoogleMap如下:

要在項目Goto->android SDK->extras->android->support->v4->android-support-v4.jar添加支持庫。只需複製這個jar文件並添加到您的應用程序的libs文件夾中,然後添加到構建路徑。之後,您可以使用Fragment添加GoogleMap。

我在這裏要告訴你如何才能實現的GoogleMap在或低於API 10:

首先,我們需要使用支持庫片段的GoogleMap的所以不是MapFragment我們將在佈局文件中使用SupportMapFragment

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/map" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
      class="com.google.android.gms.maps.SupportMapFragment"/> 

在你的java文件訪問的地圖如下:

public class MapActivity extends android.support.v4.app.FragmentActivity { 

     private GoogleMap mMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
      // Try to obtain the map from the SupportMapFragment. 
     mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
       .getMap(); 
    } 
    } 
+0

這是一些很好的信息,但我發現如何。看到我的其他答案。我不想經歷添加另一個庫的麻煩,使應用程序膨脹,並導致其他開發人員更加混淆。爲什麼Google爲了這麼簡單的事情而努力工作?他們將失去像[Leaflet](http://leafletjs.com)這樣的東西。 – Chloe 2013-03-09 05:20:15

相關問題