0

我正在尝试在 SDK 版本 10 上创建 MapView,但如何创建 MapView 的所有示例都使用Fragments,这仅在 API 11 中。

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 = com.google.android.gms.maps.GoogleMap@40718398
4

4 回答 4

1

由于 API 11 或更高版本支持 Fragments,并且 Maps 现在封装在MapFragment类中,这是 Android 类的扩展Fragment。现在您可以将地图添加为更大活动的一部分。使用MapFragment对象,您可以在较小的屏幕(例如手机)上单独显示地图,或者作为较大屏幕设备(例如平板电脑)上更复杂 UI 的一部分。所以google也提供了支持库在API 11或以下实现。

您可以android-support-v4.jar在应用程序中使用该库并实现 GoogleMap,如下所示:

在您的项目中添加支持库Goto->android SDK->extras->android->support->v4->android-support-v4.jar。只需复制此 jar 文件并添加到应用程序的 libs 文件夹中,然后添加到构建路径即可。之后,您可以使用 Fragment 添加 GoogleMap。

在这里,我将向您展示我们如何在 API 10 或以下版本中实现 GoogleMap:

首先,我们需要使用 GoogleMap 的支持库 Fragment,而不是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();
    }
   }
于 2013-03-09T04:07:52.960 回答
0

我认为答案是你(可能)不能。

Google Maps Android API v2概述是这样说的:

  • 地图现在封装在 MapFragment 类中,它是 Android 的 Fragment 类的扩展。现在您可以将地图添加为更大活动的一部分。使用 MapFragment 对象,您可以在较小的屏幕(例如手机)上单独显示地图,或者在较大屏幕的设备(例如平板电脑)上作为更复杂 UI 的一部分。
  • 因为地图封装在 MapFragment 类中,所以可以通过扩展 Android 标准 Activity 类来实现,而不是扩展版本 1 中使用的 MapActivity。

虽然没有明确说明,但我认为这意味着 v2 中的 Maps 从根本上依赖于 Fragment。

如果您需要使用 SDK 10 或更早版本,并且您不能使用某种 backport Fragment,那么您可能无法使用 Google Maps API v2。

于 2013-03-09T03:57:07.407 回答
0

目前支持所有版本,没有库你不能使用它。特别是杰克

wharton 的 sherlock 库https://github.com/JakeWharton/ActionBarSherlock 为您提供

支持所有版本。您可以为 MapView 和 android sherlock mapview 使用 mapview 气球

jar 文件已提供。您可以使用它。

https://github.com/JakeWharton/ActionBarSherlock-Plugin-Maps/

于 2013-03-09T04:05:55.063 回答
0

我发现了如何。这是一堆小事情,包括我必须实现 onResume()、onPause() 等……我以为我可以通过调用 mapView.onCreate() 来进行测试,但我想这还不够.

我还在 Google Play 库中找到了一个示例...\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);
于 2013-03-09T05:15:23.017 回答