2013-03-09 63 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

相关问题