Google Maps APIv2

时间:2013-10-27 12:22:38

标签: java android google-maps

我正在编写一款使用Google地图APIv2的Android应用。 它几乎适用于所有设备。但是Android 4.0.4和4.2.2存在问题。应用程序在映射初始化期间崩溃。

在Android 4.0.4上,它在重新启动后工作,在4.2.2上它不起作用。

这里是初始化代码:

public class MyMapActivity extends FragmentActivity implements LocationListener
{
      private GoogleMap map;
      @Override
      protected void onCreate(Bundle savedInstanceState) 
      {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_my_map);
         // Getting Google Play availability status
         int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

         // Showing status
         if(status!=ConnectionResult.SUCCESS)
         { // Google Play Services are not available
               int requestCode = 10;
               Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
               dialog.show();
         }
         else 
         {// Google Play Services are available
               // Getting reference to the SupportMapFragment of activity_main.xml
               SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);

               // Getting GoogleMap object from the fragment
               map = fm.getMap();

               // Enabling MyLocation Layer of Google Map
               map.setMyLocationEnabled(true);
         }
      }   
}

activity_my_map.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >


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

</RelativeLayout> 

1 个答案:

答案 0 :(得分:0)

我的猜测是getMap可能会返回null,尝试设置你的代码有点像这样:

private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.basic_demo);

    SupportMapFragment mapFragment =
            (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

    if (savedInstanceState == null) {
        // First incarnation of this activity.
        mapFragment.setRetainInstance(true);
    } else {
        // Reincarnated activity. The obtained map is the same map instance in the previous
        // activity life cycle. There is no need to reinitialize it.
        mMap = mapFragment.getMap();
    }
    setUpMapIfNeeded();
}

@Override
protected void onResume() {
    super.onResume();
    setUpMapIfNeeded();
}

private void setUpMapIfNeeded() {
    if (mMap == null) {
        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();
        if (mMap != null) {
            // Enabling MyLocation Layer of Google Map
            map.setMyLocationEnabled(true);
        }
    }
}

代码来自API演示RetainMapActivity